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

vmdwslir  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(301)

我试图用通配符构建一个准备好的语句,但是我遇到了一个问题,即通配符的百分比似乎返回了通配符的哈希值,我不知道为什么。问题代码是:

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

结果是:

posts.post_title LIKE {d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}BT{d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}

只是想知道有没有人知道是什么导致了这一切。任何帮助都将不胜感激。
谢谢

hrirmatl

hrirmatl1#

不用担心散列,当您执行查询时,$wpdb中的%将替换它们。
这些散列是wpv4.8.3中引入的,用于修复sql注入攻击。
它们是%字符的占位符。它阻止某人使用除%s、%d和%f以外的内容。如果有一个%不是那些被批准的用途,它将用一个散列替换这个%。当$wpdb执行查询时,该哈希将被替换回%。
如果您想自己删除散列,可以使用 remove_placeholder_escape() ,就像这样: $query['conditions'][] = $wpdb->remove_placeholder_escape($wpdb->prepare($condition, $name));

相关问题