我不知道我做错了什么。我没有编写此代码,但我在WordPress中收到以下错误:
wpdb::prepare()的查询参数必须有占位符。此消息是在版本3.9中添加的。
<?php
echo \'<div class="client_list"><input type="checkbox" name="check_all" value="0" class="" id="check_all" /> Check All</div>\';
$send_message_lists = get_post_meta($post->ID, wpvbxcon::smslist_smsclient, true);
if(!is_array($send_message_lists))
$send_message_lists = array();
//print_r($send_message_lists);
foreach($lists as $list)
{
$q = "SELECT COUNT(*) FROM $wpdb->postmeta m JOIN $wpdb->posts p ON p.ID = m.post_id WHERE meta_key = \'_wpvbx_subscription\' AND meta_value = $list->ID AND post_status = \'publish\';";
$subscriber_count = $wpdb->get_var($wpdb->prepare($q));
$checked = \'\';
if(in_array($list->ID, $send_message_lists))
$checked = \'checked="checked"\';
if( current_user_can( \'_wpvbx_access_list_\'.$list->ID ) || current_user_can(\'administrator\') )
printf(\'<div class="client_list"><input type="checkbox" name="lists[]" value="%d" class="list" %s /> %s (%d)</div>\', $list->ID, $checked, $list->post_title, $subscriber_count);
}
echo \'<div style="clear:both;"> </div>\';
?>
SO网友:birgire
您应该尝试更换meta_value = $list->ID
与占位符分离meta_value = %d
. 然后使用以下命令:
$subscriber_count = $wpdb->get_var( $wpdb->prepare( $q, $list->ID ) );
其中输入参数
$list->ID
将被视为整数(有符号)。
从Codex:
prepare accepts的查询参数sprintf()
-类似占位符。这个%s
(字符串),%d
(整数)和%f
支持(浮点)格式。(The%s
和%d
在版本2.3中将该函数添加到core后,占位符就可用了,%f
仅在版本3.3后可用。)除非转义,否则任何其他%字符都可能导致分析错误。全部的%
SQL字符串文本中的字符,包括LIKE
通配符,必须为双精度-%
转义为%%
. 全部%d
, %f
, 和%s
在查询字符串中不带引号。请注意%d
占位符只接受整数,所以不能通过%d
. 如果需要逗号值,请使用%f
改为浮动。