PHP PDO搜索问题使用多个输入字段与LIKE语句给出所有结果,即使给出一个参数


PHP PDO search Issue using multiple input fields with LIKE statment giving all results even if 1 param given

我将尝试显示我的搜索表单,并继续讨论公共方法代码。

这是我的表单(基本):
<form action="" method="get">
        Name:<input type="text" name="name">
            Last Name:<input type="text" name="last_name">
            Age:<input type="text" name="age">
            <input type="submit" value="search" name="search">
        </form>

继续我的get方法:

public function get($table){
        $ssql = 'SELECT * FROM '.$table.' WHERE `name` LIKE :name || `last_name` LIKE :last_name';
        $name = '%'.$_GET['name'].'%';
        $last_name = '%'.$_GET['last_name'].'%';
        $stm = $this->dbh->prepare($ssql);
        $stm->bindParam(':name',$name,PDO::PARAM_STR);
        $stm->bindParam(':last_name',$last_name,PDO::PARAM_STR);
        $stm->execute();
        echo $stm->rowCount();
        while($result = $stm->fetch(PDO::FETCH_OBJ)){
        echo $result->name.' '.$result->last_name.'<br>';
        }
        }

基本上这应该给我基于我的$_GET表单字段的结果。我的问题是,如果我输入名称"juris",它不输出只有3行juris是在数据库中,但从数据库的所有字段。但是如果我输入姓氏,然后提交,它只给出法律记录,然后忽略姓氏搜索项。

不应该像"WHERE etc like"term1或"term2"之类的查询基于2个给定变量之间的或给出结果?它应该分开的结果,如果一个变量$_get['value']是给定的,其他是空的?

让它按预期工作,但也许有人可以给出一个更清晰的答案,如何分离"%%"这个通配符?

$ssql = 'SELECT * FROM '.$table.' WHERE (`name` LIKE :name) || (`last_name` LIKE :last_name)';
        if(empty($_GET['name'])){
        $name = "";
        }else {
        $name = '%'.$_GET['name'].'%';
        }
        if(empty($_GET['last_name'])){
        $last_name = "";
        }else{
        $last_name = '%'.$_GET['last_name'].'%';
        }

使用if语句分隔%%通配符。

您需要使用括号将两个字段比较分组,如下所示:

SELECT * FROM '.$table.' WHERE (`name` LIKE :name && :name_prov = 1) || (`last_name` LIKE :last_name && :last_name_prov = 1)

所以昨天我试图弄清楚我如何从SQL查询中分离"%%"通配符。我对这个问题的回答是检查字段是否为空,然后将$variable更改为空字符串。如果没有,则与$_GET方法一起使用,并使用"%%"通配符。使用LIKE语句查询得到想要的结果