web-dev-qa-db-ja.com

WordPress 4.8.1はmysql_connectを使用しますが、これは動作しません。 PHP 7

WordPress 4.8.1(最新版)がwp-db.phpモジュールでmysql_connectを使用していることを確認するためだけにPHP 7にアップグレードしましたが、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}が1570行目のD:\ ApacheHtdocs\ConneXions\wp-includes\wp-db.phpにスローされます

WordPressがPHP 7を推奨していると言っていることは信じられませんが、それはうまくいきません。私はここで何が足りないのですか?

7
Bob Jones

これはあなたのサーバーに mysqli がインストールされていないか有効になっていないようです。 IIRCのmysqliはバージョン5.5でphpに追加されました、そしてそれ以降の古いmysqlエクステンションは非推奨となり完全に廃止されました。非常に古いPHPバージョンからアップグレードした場合は、mysqliを有効にするという追加の手順がまだ必要です。

(wordpressはmysqliの存在をチェックし、存在しない場合にのみ古いmysql関数を試します。)

8
Mark Kaplun

@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;
        }
}
4
birgire

この問題を解決するためにあなたがすべきことはphp.iniファイルを編集することです。

私が見つけた場所はphp.iniです。

/etc/php/php.ini(あなたが実行しているOSがわかりません)

これら二つのファイルを探して下さい:

extension=pdo_mysql.so
extension=mysqli.so

そしてそれらをコメント解除します。 Voila、それはいつでも仕事を終わらせるでしょう。

さらに読みます: https://wiki.archlinux.org/index.php/PHP

2
Lawrence Oputa

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で見ることができます)。

2
aldemarcalazans