我尝试使用 SQL 从我的数据库中获取结果,但我的结果与我用作输入的结果不一致。我总是从那些既包含整数又包含字符的结果中得到结果。例如,如果我搜索“liu”,我会得到“2LK020”的结果。我既不能用整数搜索也不能得到正确的结果……我使用:
$result = queryDatabase(
"SELECT course_tag, course_name FROM course WHERE course_tag OR course_name LIKE ?",
array(1 => '%' .$parameters[0]. '%')
使用“%”有问题吗?或者为什么我会得到这些奇怪的答案?
最佳答案
阅读:http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html
你所做的相当于
WHERE course_tag OR (course_name LIKE ?)
这是
WHERE true/false OR true/false
只要 course_tag
不是空字符串或 null 或其他“假”值,它几乎总是计算为 true
值,并且使整个 WHERE
子句的计算结果为 true
。
您不能针对单个 LIKE
值测试多个字段。那根本行不通。您需要单独测试每一个:
WHERE (course_tag LIKE ?) OR (course_name LIKE ?)
但是,由于您正在执行 %...%
双通配符搜索,您可以使用
WHERE CONCAT(course_tag, course_name) LIKE ?
关于php - 使用 "%"从 SQL 查询中得到奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34025604/