WordPress 4.8.1使用的MySQL_CONNECT不适用于PHP7

时间:2017-08-05 作者:Bob Jones

我刚刚升级到PHP 7,却发现WordPress 4.8.1(最新版本)仍然在wp db中使用mysql\\u connect。php模块,但mysql\\u connect已被弃用。

以下代码摘自wp db php,第1567-1571行:

if ( WP_DEBUG ) {
    $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
} else {
    $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this>dbpassword,
                                 $new_link, $client_flags);
}
以下是我尝试运行程序时的输出:

致命错误:未捕获错误:调用D:\\ApacheHtdocs\\ConneXions\\wp includes\\wp db中未定义的函数mysql\\u connect()。php:1570堆栈跟踪:0 D:\\ApacheHtdocs\\ConneXions\\wp includes\\wp db。php(658):wpdb->db\\u connect()
1 D:\\ApacheHtdocs\\ConneXions\\wp includes\\load。php(404):wpdb->\\u构造(\'root\',\'\',\'\',\'connexions\',\'localhost\')
\\2 D:\\ApacheHtdocs\\connexions\\wp设置。php(106):需要\\u wp\\u db()
\\3 D:\\ApacheHtdocs\\ConneXions\\wp config。php(104):require\\u once(\'D:\\ApacheHtdocs…\')
\\4 D:\\ApacheHtdocs\\ConneXions\\wp load。php(37):require\\u once(\'D:\\ApacheHtdocs…\')
\\5 D:\\ApacheHtdocs\\ConneXions\\wp blog header。php(13):require\\u once(\'D:\\ApacheHtdocs…\')
\\6 D:\\ApacheHtdocs\\ConneXions\\index。php(17):在D:\\ApacheHtdocs\\ConneXions\\wp includes\\wp db中抛出require(\'D:\\ApacheHtdocs…\')
#7{main}。php在线1570

我不敢相信WordPress说它推荐PHP 7,但它不适用。我错过了什么?

4 个回复
SO网友:Mark Kaplun

听起来你没有mysqli 已在服务器上安装和/或启用。IIRC公司mysqli 在5.5版和更早版本中添加到phpmysql 从那时起,该扩展已被弃用并完全失效。如果从非常旧的PHP版本升级,可能还需要额外的步骤来启用mysqli.

(wordpress检查是否存在mysqli 只有在它不存在的情况下,才会尝试旧的mysql 功能。)

SO网友:birgire

除了@MarkKaplun answer之外,我还发布了wpdb类中的一些代码:

以下是wpdb::use_mysqli 已确定:

它的初始值为:

/**
 * Whether to use mysqli over mysql.
 *
 * @since 3.9.0
 * @access private
 * @var bool
 */
private $use_mysqli = false;
然后在wpdb 我们的建造师:

/* Use ext/mysqli if it exists and:
 *  - WP_USE_EXT_MYSQL is defined as false, or
 *  - We are a development version of WordPress, or
 *  - We are running PHP 5.5 or greater, or
 *  - ext/mysql is not loaded.
 */
if ( function_exists( \'mysqli_connect\' ) ) {
        if ( defined( \'WP_USE_EXT_MYSQL\' ) ) {
                $this->use_mysqli = ! WP_USE_EXT_MYSQL;
        } elseif ( version_compare( phpversion(), \'5.5\', \'>=\' ) || ! function_exists( \'mysql_connect\' ) ) {
                $this->use_mysqli = true;
        } elseif ( false !== strpos( $GLOBALS[\'wp_version\'], \'-\' ) ) {
                $this->use_mysqli = true;
        }
}

SO网友:Lawrence Oputa

要解决这个问题,您应该做的是编辑php。ini文件。

在何处运行php.ini我在以下位置找到了我的:

/etc/php/php.ini (虽然我不知道你在运行什么操作系统,但请简单查找你的操作系统)

查找以下两个文件:

extension=pdo_mysql.so
extension=mysqli.so
并取消注释。瞧,这随时都可以完成任务。

进一步阅读:https://wiki.archlinux.org/index.php/PHP

SO网友:aldemarcalazans

您使用的是Xamppp 7吗。x for Windows?

当我将Xampp 5.6升级到Xampp 7.1时,我就遇到了这种情况。检查配置文件C:\\Xampp\\php\\php.ini, 我注意到许多涉及PHP扩展名的错误(它们缺少前缀PHP\\uu和后缀.dll)。其中一个与mysqli有关。

我在那里发现了错误的设置:

extension=mysqli
正确的设置(编辑此行后):

extension=php_mysqli.dll
纠正这个问题解决了我的问题。

顺便说一下:不要忘记更正所有其他错误的设置(正确的扩展名可以在C:\\xampp\\php\\ext中看到)。

结束

相关推荐

为什么这个$wpdb查询循环5次?

我只想为此查询返回一个值,它位于functions.php 文件这样做的目的是返回一个我需要的值post_meta 已更新。返回相同(正确)值的次数为5次。。。我只希望该值返回一次。add_action( \'added_post_meta\', function ( $mid, $object_id, $meta_key, $_meta_value) { global $wpdb; $table_name = $wpdb->pref