it-swarm.com.de

WordPress 4.8.1 verwendet mysql_connect, was nicht funktioniert PHP 7

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

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: Nicht gefundener Fehler: Rufen Sie die undefinierte Funktion mysql_connect () in D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php: 1570 auf
Stack-Trace:
# 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): erfordern ('D:\ApacheHtdocs ...')
# 7 {main} in D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php in Zeile 1570

Ich kann nicht glauben, dass WordPress PHP 7 empfiehlt, aber es funktioniert nicht damit. Was vermisse ich hier?

7
Bob Jones

Das hört sich so an, als hätten Sie mysqli nicht auf Ihrem Server installiert und/oder aktiviert. IIRC mysqli wurde in Version 5.5 zu php hinzugefügt, und die ältere mysql-Erweiterung war seitdem veraltet und vollständig eingestellt. Wenn Sie ein Upgrade von einer sehr alten PHP -Version durchgeführt haben, ist möglicherweise noch der zusätzliche Schritt zum Aktivieren von mysqli erforderlich.

(WordPress prüft auf die Existenz von mysqli und versucht nur, wenn es nicht existiert, die älteren mysql-Funktionen.)

8
Mark Kaplun

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

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 Konstruktor 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

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

lauf wo ist php.ini ich habe meinen gefunden bei:

/etc/php/php.ini (obwohl ich nicht weiß, unter welchem ​​Betriebssystem Sie arbeiten, finden Sie einfach Ihr Betriebssystem)

Suchen Sie nach diesen beiden Dateien:

extension=pdo_mysql.so
extension=mysqli.so

und kommentiere sie aus. Voila, das würde die Arbeit jederzeit erledigen.

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

2
Lawrence Oputa

Verwenden Sie Xamppp 7.x für Windows?

Das ist mir passiert, als ich mein Xampp 5.6 auf Xampp 7.1 aktualisiert habe. Beim Überprüfen der Konfigurationsdatei C:\Xampp\php\php.ini sind mir viele Fehler mit dem Namen der PHP -Erweiterungen aufgefallen (ihnen fehlen das Präfix php_ und das Suffix .dll). Einer von ihnen ist mit mysqli verwandt.

Die falsche Einstellung habe ich dort gefunden:

extension=mysqli

Die richtige Einstellung (nach dem Bearbeiten dieser Zeile):

extension=php_mysqli.dll

Das zu korrigieren löste mein Problem.

Übrigens: Vergessen Sie nicht, alle anderen falschen Einstellungen zu korrigieren (den korrekten Namen der Erweiterungen finden Sie unter C:\xampp\php\ext).

2
aldemarcalazans