应该通过$wpdb->Close()关闭$wpdb

时间:2020-12-21 作者:D.JCode

我一直在为我的网站编写一些自定义插件,我想知道如何正确地与$wpdb交互。我的插件使用全局$wpdb连接执行一些查询。我注意到一个$wpdb->;关闭();方法已添加到WordPress,以关闭数据库连接对象。

我的问题是:插件应该在执行查询后关闭连接吗?

我被搜索到一些著名插件的文件夹(如rank math、Yoast)。他们经常使用$wpdb,但我找不到$wpdb->;在其代码上关闭()。我的意思是,在函数结束时,它们不会关闭查询。

例如,我从上周开始就一直在编写一个统计帖子的函数

    function get_posts_count_from_last_week($post_type = \'post\')
 {
        global $wpdb;
        $numposts = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) " . "FROM " . $wpdb->posts . " WHERE post_status=\'publish\' AND post_type= %s AND post_date> %s", $post_type, date(\'Y-m-d H:i:s\', strtotime(\'-168 hours\'))));
        return $numposts;

}
我得到了很多“WordPress database error Commands out of sync; you can’t run this command now for query SELECT”所以我必须$wpdb->close(); 在回来之前和之后我没有Commands out of sync 完全

我很困惑,为什么我必须关闭连接,而其他插件却不这样做!顺便说一下,在我的主题中,我有一些global $wpdb 但是,同样没有$wpdb->close() 用于关闭。

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

The close() function was added for completeness in the database abstraction. 如果数据库在插件或主题中过早关闭(在使用时),the next call to wpdb::query() will re-open the connection.

你的Commands out of sync 错误是MySQL error, 不是WordPress,它可能来自您正在使用的插件或主题。搜索wordpress database commands out of sync 提出了许多可能的问题,包括缓存插件。尝试禁用所有插件并切换到默认主题(如二十个);如果问题消失,请重新打开插件,直到找到罪魁祸首。然后联系该插件的支持团队。

相关推荐

Wpdb result with pagination

我得到了这个函数,它在没有分页的情况下正常工作,但现在我需要在页面上进行一些分页,因为列表现在已经长大了,我该怎么做呢?function listing_items($args){ global $wpdb; $listQ = new WP_Query( $args ); $pid = get_the_ID( ); $return = \'\'; if ( $listQ->have_post