首先,在SQL中%
符号是"wildcard operator". 当用于LIKE
语句,表示“0个或更多字符”。所以LIKE \'Hello%\'
表示以开头的任何字符串Hello
, 包括Hello
。虽然LIKE \'%Hello%\'
表示包含Hello
, 在开头、中间或结尾。
$wpdb->prepare()
另一方面,使用%
用于支持占位符的符号,带有%d
和%s
. 它允许您在查询中安全地插入变量。
所以问题是%
有两种不同的含义,如果你想$wpdb->prepare()
一LIKE
查询
解决方案是“逃离”%
使用字符两次表示符号,如%%
. 这说明$wpdb->prepare()
那个%
符号是文字%
符号,而不是占位符的一部分。这就是您如何使用%
a中的符号LIKE
使用占位符进行查询。
因此,在您的第一个示例中:
LIKE \'%%%s%%\'
如果
$code
是
Hello
, 那么生成的SQL语句是:
LIKE \'%Hello%\'
因为
%s
已替换为
$code
, 还有替身
%%
已被解释为
%
, 给我们留下一个有效的
LIKE
包含
Hello
, 在开头、中间或结尾。
另一方面,你的另一个例子是:
LIKE \'%s%\'
不起作用。因为
%s
将替换为
$code
, 但是一个流浪汉
%
剩余的将显示为断开的占位符。如果只想查找以开头的字符串
$code
, 您需要使用:
LIKE \'%s%%\'
这将为您提供:
LIKE \'Hello%\'