Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL未根据某些条件正确筛选_Php_Mysql_Sql - Fatal编程技术网

Php SQL未根据某些条件正确筛选

Php SQL未根据某些条件正确筛选,php,mysql,sql,Php,Mysql,Sql,我的MySQL查询有点问题: $statement = $conn->prepare ("SELECT * FROM ext where `approved` = 0 and `account-type`= 2 AND `ext-name` LIKE :search OR description LIKE :search"); 查询的类似部分也可以工作——它确实返回与正确关键字对应的条目。但是,它返回的条目属于每种帐户类型——它并不是只过滤为帐户类型为2的条目 我觉得这是我在SQL语

我的MySQL查询有点问题:

$statement = $conn->prepare
("SELECT * FROM ext where `approved` = 0 
and `account-type`= 2 
AND `ext-name` LIKE :search OR description LIKE :search");
查询的类似部分也可以工作——它确实返回与正确关键字对应的条目。但是,它返回的条目属于每种
帐户类型
——它并不是只过滤为
帐户类型
为2的条目

我觉得这是我在SQL语句中犯的错误,但如果这是我的PHP中的错误,下面是完整的代码片段:

    $statement = $conn->prepare("SELECT * FROM ext where `approved` = 0 and `account-type`= 2 AND `ext-name` LIKE :search OR description LIKE :search");
    $statement->bindValue(':search', "%{$keyword}%");
    $statement->execute();

    $exchanges = $statement->fetchAll();
使用括号:

SELECT * FROM ext 
where `approved` = 0 and `account-type`= 2 
AND (`ext-name` LIKE :search OR description LIKE :search)

您可能错过了最后一行中的括号:

AND `ext-name` LIKE :search OR description LIKE :search"
如果没有它们,查询将返回所有与
描述匹配的行,如:search

这是一个典型的错误——如果查询没有返回您期望的结果,并且您的
查询您可能会遗漏一些括号。

您应该使用大括号来表示所需的优先级

你可能是说:

SELECT * FROM ext where `approved` = 0 
 and `account-type`= 2 
 AND (`ext-name` LIKE :search OR description LIKE :search )
但实际情况是这样评估的:

SELECT * FROM ext 
where ( `approved` = 0  and `account-type`= 2 AND `ext-name` LIKE :search )
 OR description LIKE :search

啊!!我确实试过括号,但肯定是放错地方了。非常感谢。时间一过我就接受。