我无法使用$wpdb->prepare,因为我希望能够向查询字符串中添加如下所示的变量:
$var = "AND pm.meta_value = \'%$_POST[\'val\']%\'";
获取文字
%
通过
$wpdb->prepare
只要加倍。你不需要回避
$wpdb->prepare
.
概念验证:
var_dump($wpdb->prepare(\'SELECT * FROM {$wpdb->posts} WHERE post_title LIKE "%%%s%%"\',\'Hello\'));
下面的一条评论表明,可能需要一些更复杂的东西:
$var[] = \'post_title LIKE "%%%s%%"\';
$var_data[] = \'Hello\';
$var[] = \'post_name LIKE "%%%s%%"\';
$var_data[] = \'Hi\';
$var[] = \'post_date LIKE "%%%s%%"\';
$var_data[] = \'Howdy\';
var_dump($wpdb->prepare(\'SELECT * FROM {$wpdb->posts} WHERE post_title \'.implode(\' AND \',$var),$var_data));
当然,在实践中,您可能会创建
$var
和
$var_data
在某种循环中,例如:
foreach ($_POST as $k=>$v) {
if (\'abc\' == $k) {
$var[] = \'post_title LIKE "%%%s%%"\';
$var_data[] = $v; // should probably validate a bit
} elseif(...) {
// ...
} else {
// ...
}
}
始终可以对每个项目运行prepare:
$var[] = $wpdb->prepare(\'post_title LIKE "%%%s%%"\',\'Hello\');
但我觉得使用数组的方法更加优雅,只会运行
$wpdb->prepare
一次,为了它的价值。