将 like 语句与 $wpdb->prepare 一起使用,显示通配符所在的散列

Using like statement with $wpdb->prepare showing hashes where wildcard characters are

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

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

结果是:

posts.post_title LIKE {d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}BT{d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}

只是想知道是否有人对可能导致此问题的原因有任何想法。任何帮助将不胜感激。

谢谢

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

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

它们是 % 字符的占位符。它防止有人使用 %s、%d 和 %f 以外的东西。如果有 % 不是那些批准的用途,它将用哈希替换 %。当 $wpdb 执行查询时,该哈希将被替换回 %。

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

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