查询"喜欢'%%'"的目的是什么?

MxL*_*evs 0 mysql sql

我有一个应用程序在其中一个查询中具有以下WHERE子句.

WHERE objId = 5 AND ( field1 like '%%' OR field2 like '%%' OR field3 like '%%')
Run Code Online (Sandbox Code Playgroud)

使用MySQL的EXPLAIN 函数,它似乎没有寻找超过必要的行(幸运的是,objId过滤掉了很多行的索引),但检查字段是否相似的重点是%%什么?

hsz*_*hsz 8

我的猜测是生成这个SQL的脚本之间有一些变量%,但是它们都是空的,所以有一个输出%%.

只是:

$var = '';
$sql = "... field LIKE '%" . $var . "%' OR ...";
Run Code Online (Sandbox Code Playgroud)


ode*_*dsh 5

like '%%'/ like '%' 是相同的空状态.(接受除NULL以外的所有值)

后面的代码很可能是这样的:

WHERE objId = ? AND ( field1 like '%?%' OR field2 like '%?%' OR field3 like '%?%')

而你恰好发送它没有任何实际的过滤器值..(所有过滤条件的空字符串)