Wpdb::Prepare()用法不正确

时间:2014-10-14 作者:user50733

我不知道我做错了什么。我没有编写此代码,但我在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>\';


        ?>    

1 个回复
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 改为浮动。

结束

相关推荐

在典型的请求期间,$wpdb对象在什么时候变得可用?

我在类方法中编写了一些自定义SQL查询,并注意到如果我将该方法挂接到wp 行动如果我钓到plugins_loaded 行动,它们似乎不起作用。My question:在典型请求期间的什么时候$wpdb 对象是否可用?参考文献:http://codex.wordpress.org/Plugin_API/Action_Referencehttp://codex.wordpress.org/Class_Reference/wpdb