使用 like 语句与 $wpdb->prepare 显示通配符所在的哈希值

R14*_*523 6 php mysql wordpress prepared-statement sql-like

我正在尝试使用通配符构建一个准备好的语句,但是我遇到了一个问题,其中百分比通配符似乎返回了通配符的哈希值,我不确定为什么。有问题的代码是:

$condition = $wpdb->prefix."posts.post_title LIKE %%%s%%";
$query['conditions'][] = $wpdb->prepare($condition, $name);
Run Code Online (Sandbox Code Playgroud)

结果是:

posts.post_title LIKE {d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}BT{d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有人对造成这种情况的原因有任何想法。任何帮助将不胜感激。

谢谢

Mic*_*ili 16

不用担心哈希值,当您执行查询时,它们将被 $wpdb 中的 % 替换。

这些哈希值是在 WP v4.8.3 中引入的,作为 SQL 注入攻击的修复。

它们是 % 字符的占位符。它可以防止某人使用 %s、%d 和 %f 之外的其他内容。如果除了那些批准的用途之外还有%,它将用哈希值替换%。当 $wpdb 执行查询时,该哈希值将被替换回 %。

如果您想自己删除哈希值,可以使用remove_placeholder_escape(),如下所示:

$query['conditions'][] = $wpdb->remove_placeholder_escape($wpdb->prepare($condition, $name));