2014-12-19 115 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