Like‘%var%%’和‘%var%’之间的差异

时间:2019-10-15 作者:my stacc

以下各项之间有何区别(如有):

$ids = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key=\'_product_attributes\' AND meta_value LIKE \'%%%s%%\';", $code));
以及

$ids = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key=\'_product_attributes\' AND meta_value LIKE \'%s%\';", $code));

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

首先,在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%%\'
如果$codeHello, 那么生成的SQL语句是:

LIKE \'%Hello%\'
因为%s 已替换为$code, 还有替身%% 已被解释为%, 给我们留下一个有效的LIKE 包含Hello, 在开头、中间或结尾。

另一方面,你的另一个例子是:

LIKE \'%s%\'
不起作用。因为%s 将替换为$code, 但是一个流浪汉% 剩余的将显示为断开的占位符。如果只想查找以开头的字符串$code, 您需要使用:

LIKE \'%s%%\'
这将为您提供:

LIKE \'Hello%\'

相关推荐

MySQLI_QUERY():MySQL服务器已离开以进行Curl请求

我创建了一个WordPress插件,激活后在jquery Datatable中显示结果。我们正在通过CURL Post获取结果。帖子URL是ASP。Net应用程序。该插件是为在帖子中添加我的短代码后遇到以下错误的客户创建的。客户端使用的是优雅主题的Divi(最新版本),WordPress 5.2.2运行在Apache/PHP 7.2.21上此错误仅显示在添加了快捷码的帖子页面上:警告:mysqli\\u query():MySQL服务器已消失在/homepages/10/d241347454/htdocs