2014-12-19 117 views
2

谁能帮我这个底部功能导致错误警告:缺少参数2 :: WPDB准备()

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; 
} 

谢谢你阅读我的问题。并预先感谢您的回复。

+0

错误消息说你错过了调用prepare()方法的第二个参数。我也看不到第二个参数... – Madbreaks 2014-12-19 00:44:39

回答

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; 

} 

你可以在必要时准备单个字符串。您无需专门针对完全概述的查询运行准备工作。

+0

谢谢你清:) – c1811347 2015-04-30 16:38:03