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

ответ

0

Ваша проблема в подготовленной части в условном выражении. если strlen($cat) > 0 возвращает false, вы никогда не добавляете его в строку запроса и поэтому не должны ничего подготовить. Кроме того, вы также не передаете $ cat методу подготовки и не поставляете необходимый оператор спринта (% 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

Спасибо Qing :) – c1811347

Смежные вопросы