WordPress 4.8.1使用mysql_connect,不适用于PHP 7


10

我刚刚升级到PHP 7,只是发现WordPress 4.8.1(最新版本)仍在wp-db.php模块中使用mysql_connect,但是已弃用mysql_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.php:1570中未定义的函数mysql_connect()
堆栈跟踪:
#0 D:\ ApacheHtdocs \ ConneXions \ wp-includes \ wp- db.php(658):wpdb-> db_connect()
#1 D:\ ApacheHtdocs \ ConneXions \ wp-includes \ load.php(404):wpdb-> __ construct('root',``,'connexions',' localhost')
#2 D:\ ApacheHtdocs \ ConneXions \ wp-settings.php(106):require_wp_db()
#3 D:\ ApacheHtdocs \ ConneXions \ wp-config.php(104):require_once('D:\ ApacheHtdocs。 ..')
#4 D:\ ApacheHtdocs \ ConneXions \ wp-load.php(37):require_once('D:\ ApacheHtdocs ...')
#5 D:\ ApacheHtdocs \ ConneXions \ wp-blog-header.php (13):require_once('D:\ ApacheHtdocs ...')
#6 D:\ ApacheHtdocs \ ConneXions \ index.php(17):require('D:\ ApacheHtdocs ...')
#7 {main}放在D:\ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db中。第1570行的php

我不敢相信WordPress会说它推荐PHP 7,但是它不起作用。我在这里想念什么?


2
mysql_connect仅在mysqli未检测到时用作后备。看来您没有安装mysqli或未mysql安装(mysqli建议mysql过时)
Tom J Nowell

Answers:


10

听起来您没有在服务器上安装和/或启用mysqli。IIRC mysqli已在5.5版中添加到php中,并且较早的mysql扩展名从那时起就已弃用并完全淘汰。如果从非常旧的PHP版本升级,则可能还需要启用额外的步骤mysqli

(wordpress检查是否存在,mysqli并且只有在不存在时才尝试使用较旧的mysql功能。)


mysql在版本4和5中是PHP的一部分,在版本7中已删除。mysqli在PHP 5.0.0中引入,并且可在所有PHP 5版本中使用,到目前为止,在所有PHP 7版本中均可使用。您可能会认为MySQL在PHP 5.5.0中已弃用。
CJ丹尼斯

@CJDennis,这就是我所说的关于弃用的内容。如果您认为我的英语有误,欢迎您继续编辑答案;)
Mark Kaplun

我正在纠正您的想法,即当在5.0.0中引入mysqli时是在5.5.0中引入的。
CJ丹尼斯

4

除了@MarkKaplun答案之外,我还发布了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;
        }
}

2

解决此问题的方法是编辑php.ini文件。

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

/etc/php/php.ini (尽管我不知道您正在运行什么操作系统,但是简单地找到您的操作系统)

查找以下两个文件:

extension=pdo_mysql.so
extension=mysqli.so

并取消注释。瞧,这可以随时完成工作。

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


2

您是否在Windows使用Xamppp 7.x?

当我将Xampp 5.6升级到Xampp 7.1时,这发生了。在检查配置文件C:\ Xampp \ php \ php.ini时,我注意到很多错误,这些错误涉及PHP扩展名(它们缺少前缀php_和后缀.dll)。其中之一与mysqli有关。

我在那找到错误的设置:

extension=mysqli

正确的设置(在编辑此行之后):

extension=php_mysqli.dll

更正解决了我的问题。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.