我的MySQL查询遇到了一些麻烦:
$statement = $conn->prepare
("SELECT * FROM ext where `approved` = 0
and `account-type`= 2
AND `ext-name` LIKE :search OR description LIKE :search");
查询的LIKE部分有效 - 它确实返回与正确关键字对应的条目。但是,它返回的条目是每account-type
个 - 它不会过滤到只有account-type
为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();
答案 0 :(得分:7)
使用括号:
SELECT * FROM ext
where `approved` = 0 and `account-type`= 2
AND (`ext-name` LIKE :search OR description LIKE :search)
答案 1 :(得分:1)
可能你错过了最后一行的括号:
AND `ext-name` LIKE :search OR description LIKE :search"
如果没有它们,查询将返回与description LIKE :search
匹配的所有行。
这是典型的错误 - 如果查询没有返回您的预期,并且您的OR
中有{{1}}
查询你可能会错过一些括号。
答案 2 :(得分:1)
您应该使用大括号来表达您想要的优先级。
你可能意味着:
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