MySQL:从特定类型字段中搜索所有字段


MySQL: Search all fields from a specific type field

我有一个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'";