我有一个MySQL用户表,有多个字段,包括整数用户类型字段(admin或normal)。我希望有一个主搜索,可以搜索给定的字符串在所有领域,但与用户类型的where子句(为特定类型)
我使用
$sql = "SELECT * FROM users WHERE user_fname like '%".$data."%' OR user_lname like '%".$data."%' OR user_login like '%".$data."%' OR user_callsign like '%".$data."%' AND user_type='2'";
但是当我搜索时,它会查询整个表,而忽略我的user_type子句。我已经没有主意了,请告诉我如何才能克服这个困难。
谢谢,
您需要像(all ORs)
一样组织OR
条件,然后应用AND
过滤器,这样它就不会忽略user_type='2'
和部分
$sql = "SELECT * FROM users
WHERE (user_fname like '%".$data."%'
OR user_lname like '%".$data."%'
OR user_login like '%".$data."%'
OR user_callsign like '%".$data."%')
AND user_type='2'";
你需要加括号。Or和and的运算顺序相等也就是说从左到右
你的查询应该像这样:
SELECT *
FROM users
WHERE (user_fname like '%".$data."%'
OR user_lname like '%".$data."%'
OR user_login like '%".$data."%'
OR user_callsign like '%".$data."%')
AND user_type='2'
还应该对输入进行消毒和/或使用准备好的查询。否则,您将使自己容易受到大规模SQL注入攻击
考虑使用PDO或MySQLi(如果你必须)。
$sql = "SELECT * FROM users WHERE (user_fname like '%".$data."%' OR user_lname like '%".$data."%' OR user_login like '%".$data."%' OR user_callsign like '%".$data."%') AND user_type='2'";