我有一个应用程序在其中一个查询中具有以下WHERE子句.
WHERE objId = 5 AND ( field1 like '%%' OR field2 like '%%' OR field3 like '%%')
Run Code Online (Sandbox Code Playgroud)
使用MySQL的EXPLAIN 函数,它似乎没有寻找超过必要的行(幸运的是,objId过滤掉了很多行的索引),但检查字段是否相似的重点是%%什么?
我的猜测是生成这个SQL的脚本之间有一些变量%,但是它们都是空的,所以有一个输出%%.
只是:
$var = '';
$sql = "... field LIKE '%" . $var . "%' OR ...";
Run Code Online (Sandbox Code Playgroud)
like '%%'/ like '%' 是相同的空状态.(接受除NULL以外的所有值)
后面的代码很可能是这样的:
WHERE objId = ? AND ( field1 like '%?%' OR field2 like '%?%' OR field3 like '%?%')
而你恰好发送它没有任何实际的过滤器值..(所有过滤条件的空字符串)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |