警告:缺少wpdb :: prepare()的参数2

时间:2014-12-19 00:40:55

标签: wordpress

任何人都可以帮我这个底部函数导致错误

Warning: Missing argument 2 for wpdb::prepare(), called in /home/.../wp-content/themes/theme/display.php on line 233 and defined in /home/.../wp-includes/wp-db.php on line 1147

这是功能

function ts_display_getnumposts($cat){

    global $wpdb;

    $qryString = "
        SELECT  Count(*) as totpost FROM ".$wpdb->posts." a 
        INNER   JOIN ".$wpdb->term_relationships." b ON a.ID = b.object_id 
        INNER   JOIN ".$wpdb->term_taxonomy." c ON b.term_taxonomy_id = c.term_taxonomy_id
        INNER   JOIN ".$wpdb->terms."  d ON c.term_id = d.term_id
        WHERE   a.post_type = 'display'
    ";

    if(strlen($cat)>0){
        $qryString .= " AND d.slug = '".$cat."'";
    }

    $numposts = $wpdb->get_var($wpdb->prepare($qryString));

    return $numposts;
}

感谢您阅读我的问题。并提前感谢您的回复。

1 个答案:

答案 0 :(得分:0)

你的问题是准备好的部分是有条件的。如果strlen($cat) > 0返回false,则永远不会将其添加到查询字符串中,因此无需准备任何内容。除此之外,您还没有将$ cat传递给prepare方法,也没有提供必要的sprint运算符(%s代表字符串,%d代表数字等)。尝试这样的事情:

function ts_display_getnumposts($cat){

    global $wpdb;

    $qryString = "

        SELECT  Count(*) as totpost FROM ".$wpdb->posts." a 

        INNER   JOIN ".$wpdb->term_relationships." b ON a.ID = b.object_id 

        INNER   JOIN ".$wpdb->term_taxonomy." c ON b.term_taxonomy_id = c.term_taxonomy_id

        INNER   JOIN ".$wpdb->terms."  d ON c.term_id = d.term_id

        WHERE   a.post_type = 'display'

    ";

    if(strlen($cat)>0){

        $qryString .= $wpdb->prepare(" AND d.slug = %s", $cat);

    }

    $numposts = $wpdb->get_var($qryString);

    return $numposts;

}

您可以在必要时准备单个字符串。您不必专门针对一个完整概述的查询进行准备。