首先,在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%\'