Php SQL未根据某些条件正确筛选
我的MySQL查询有点问题: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语
$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
啊!!我确实试过括号,但肯定是放错地方了。非常感谢。时间一过我就接受。