任何人都可以帮我这个底部函数导致错误
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 :(得分: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;
}
您可以在必要时准备单个字符串。您不必专门针对一个完整概述的查询进行准备。