WordPress 4.8.1 verwendet mysql_connect, was nicht mit PHP 7 funktioniert

Ich habe gerade ein Upgrade auf PHP 7 durchgeführt, nur um festzustellen, dass WordPress 4.8.1 (neueste Version) immer noch mysql_connect im Modul wp-db.php verwendet, aber mysql_connect ist veraltet.

Der folgende Code stammt aus wp-db-php, Zeilen 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); } 

Hier ist die Ausgabe, wenn ich versuche, mein Programm auszuführen:

Schwerwiegender Fehler: Uncaught Fehler: Rufen Sie die nicht definierte function mysql_connect () in D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db.php: 1570 auf
Stapelverfolgung:
# 0 D: \ ApacheHtdocs \ ConneXions \ wp-include \ wp-db.php (658): wpdb-> db_connect ()
# 1 D: \ ApacheHtdocs \ ConneXions \ wp-includes \ load.php (404): wpdb -> __ Konstrukt (‘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} wird in Zeile 1570 in D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db.php geworfen

Ich kann nicht glauben, dass WordPress sagt, es empfiehlt PHP 7, aber es funktioniert nicht damit. Was fehlt mir hier?

Solutions Collecting From Web of "WordPress 4.8.1 verwendet mysql_connect, was nicht mit PHP 7 funktioniert"

Das klingt so, als ob Sie mysqli nicht auf Ihrem Server installiert und / oder aktiviert haben. IIRC mysqli wurde in Version 5.5 zu PHP hinzugefügt, und die ältere mysql Erweiterung war seither veraltet und vollständig zurückgezogen. Wenn Sie ein Upgrade von einer sehr alten PHP-Version durchgeführt haben, benötigen Sie möglicherweise noch den zusätzlichen Schritt, mysqli .

(WordPress prüft auf das Vorhandensein von mysqli und nur wenn es nicht existiert, versucht es die älteren mysql functionen.)

Zusätzlich zur Antwort von @MarkKaplun poste ich Code aus der wpdb-class:

So wird der wpdb::use_mysqli ermittelt:

Es ist initialisiert mit:

 /** * Whether to use mysqli over mysql. * * @since 3.9.0 * @access private * @var bool */ private $use_mysqli = false; 

und dann haben wir im wpdb Konstruktor:

 /* 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; } } 

Was Sie tun sollten, um dieses Problem zu lösen, ist Ihre php.ini-Datei zu bearbeiten.

run wo ist php.ini Ich habe meinen gefunden bei:

/etc/php/php.ini (obwohl ich nicht weiß, welches Betriebssystem Sie gerade /etc/php/php.ini finden Sie Ihr)

Suchen Sie nach diesen zwei Dateien:

 extension=pdo_mysql.so extension=mysqli.so 

und entziehe sie. Voila, das würde den Job jederzeit erledigen.

Weiterführende Literatur: https://wiki.archlinux.org/index.php/PHP