如何将orderby参数传递给$wpdb->Prepare()?

时间:2017-08-14 作者:Luca Reghellin

当传递诸如“ASC”或“DESC”之类的值以进行类似的准备时:

[...]
$order = \'DESC\';
[... (the whole query)], $order); // (as a prepare param)
它不起作用,因为结果查询来自以下内容:

[...] group_concat(p.id ORDER BY p.post_date %s)
将是:

[...] group_concat(p.id ORDER BY p.post_date \'DESC\')
而应为:

[...] group_concat(p.id ORDER BY p.post_date DESC)
如何解决?

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

您不需要使用$wpdb->prepare() 对于ORDER BY 条款。$wpdb->prepare() 将始终引用您的变量。

假设您在请求中收到了排序,则可以通过根本不使用用户输入的值来防止SQL注入:

$sql = "SELECT....";
if ( \'asc\' == $_GET[\'order\'] ) {
    $sql .= \' ORDER BY p.post_date ASC\';
} else {
    $sql .= \' ORDER BY p.post_date DESC\';
}
$wpdb->prepare( $sql , $value_parameter );

结束

相关推荐

使用WordPress$wpdb对象从自定义表获取结果时出错

我试图使用$wpdb对象从自定义表中获取结果,但在回显结果时出现错误:Notice: Undefined property: stdClass::$category in... 以下是PHP代码:global $wpdb; $prodCat = $wpdb->get_results( \"SELECT * FROM product_category\" , OBJECT_K); foreach ( $prodCat as $row ){