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を推奨していると言っていることは信じられませんが、それはうまくいきません。私はここで何が足りないのですか?
これはあなたのサーバーに mysqli がインストールされていないか有効になっていないようです。 IIRCのmysqli
はバージョン5.5でphpに追加されました、そしてそれ以降の古いmysql
エクステンションは非推奨となり完全に廃止されました。非常に古いPHPバージョンからアップグレードした場合は、mysqli
を有効にするという追加の手順がまだ必要です。
(wordpressはmysqli
の存在をチェックし、存在しない場合にのみ古いmysql
関数を試します。)
@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;
}
}
この問題を解決するためにあなたがすべきことはphp.iniファイルを編集することです。
私が見つけた場所はphp.ini
です。
/etc/php/php.ini
(あなたが実行しているOSがわかりません)
これら二つのファイルを探して下さい:
extension=pdo_mysql.so
extension=mysqli.so
そしてそれらをコメント解除します。 Voila、それはいつでも仕事を終わらせるでしょう。
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で見ることができます)。