WordPress 4.8.1はmysql_connectを使用しますが、これはPHP 7では機能しません


9

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 D:\ ApacheHtdocs \ ConneXions \ wp-includes \ wp-dbで{main}がスローされます。行1570のphp

WordPressがPHP 7を推奨していると言っているとは信じられませんが、動作しません。ここで何が欠けていますか?


2
mysql_connectmysqli検出されない場合のフォールバックとしてのみ使用されます。どちらmysqlimysqlインストールされていないか、インストールされているようです(mysqli推奨、mysql非推奨)
Tom J Nowell

回答:


9

サーバーに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 2017

mysqliが5.5.0で導入されたときに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 (私はあなたが実行しているOSがわかりませんが、あなたのものを見つけてください)

次の2つのファイルを探します。

extension=pdo_mysql.so
extension=mysqli.so

それらのコメントを外します。出来上がり、いつでも仕事が完了します。

さらに読む:https : //wiki.archlinux.org/index.php/PHP


2

Xamppp 7.x for Windowsを使用していますか?

Xampp 5.6をXampp 7.1にアップグレードしたときに起こりました。構成ファイルC:\ Xampp \ php \ php.iniを調べたところ、PHP拡張機能の名前に関連する多くのエラーに気付きました(これらには、接頭辞php_と接尾辞.dllがありません)。それらの1つはmysqliに関連しています。

そこで見つけた間違った設定:

extension=mysqli

正しい設定(この行を編集した後):

extension=php_mysqli.dll

それを修正することで私の問題は解決しました。

ちなみに、他のすべての間違った設定を忘れずに修正してください(拡張機能の正しい名前はC:\ xampp \ php \ extにあります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.