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