【问题标题】:MySQL: Search all fields from a specific type fieldMySQL:从特定类型字段中搜索所有字段
【发布时间】:2014-07-09 18:34:15
【问题描述】:

我有一个 MySQL 用户表,其中包含多个字段,包括整数用户类型字段(管理员或普通)。我正在寻找一个主搜索,它可以在所有字段中搜索给定的字符串,但带有用户类型的 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 子句。我的想法不多了,请建议我如何解决这个问题。

谢谢,

【问题讨论】:

  • 由于user_type字段是整数类型,去掉单引号。

标签: php mysql search


【解决方案1】:

您需要组织您的OR 条件,例如(all ORs),然后应用AND 过滤器,这样它就不会忽略user_type='2' AND 部分

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

【讨论】:

  • 完美!就这么简单。非常感谢,您节省了我的时间
【解决方案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(如果必须的话)。

【讨论】:

    【解决方案3】:
    $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'";
    

    【讨论】:

    • 你能对你的答案加一点解释吗?对帮助提问者大有帮助!
    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多