自WP3起。5.prepare()
接受占位符作为安全措施,而不仅仅是将参数附加到查询中。因此$wpdb->prefix
需要成为第二个参数,由调用%s
:
$count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM %s WHERE answer !=\' \'", $wpdb->prefix . "faq_questions" ) );
但是,这样做会以引号返回表名:
SELECT COUNT(id) FROM \'wp_faq_questions\' WHERE answer !=\' \'
我怎样才能解决这个问题?
最合适的回答,由SO网友:s_ha_dum 整理而成
我怎样才能解决这个问题?
你不能,但它没有坏。你在说prepare
使用字符串。将引用字符串。它并不是要生成MySQL语法,这是您要求它做的。您的tablename与其说是字符串值,不如说是MySQL命令或关键字。那不是什么prepare
用于。
prepare
旨在对用户提供的数据进行操作。您的tablename不是用户提供的数据,所以不需要“准备”它。这是不必要的。只需在SQL本身中构造表名:
"SELECT COUNT(id) FROM ".$wpdb->prefix."faq_questions WHERE answer !=\' \'"
请参见:
https://wordpress.stackexchange.com/a/93861/21376