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

时间:2014-07-09 18:34:15

标签: php mysql search

我有一个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子句。我的想法已经不多了,请告诉我,我将如何解决这个问题。

谢谢,

3 个答案:

答案 0 :(得分:3)

您需要整理OR条件,例如(all ORs),然后应用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'";

答案 1 :(得分:0)

你需要括起来。 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(如果必须)。

答案 2 :(得分:0)

$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'";