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: Nicht erfasster Fehler: Aufruf der undefinierten Funktion mysql_connect () in D: \ ApacheHtdocs \ ConneXions \ wp-Includes \ wp-db.php: 1570 Stapelverfolgung
:
# 0 D: \ ApacheHtdocs \ ConneXions \ wp-Includes \ 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 D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db ausgelöst. PHP auf Linie 1570
Ich kann nicht glauben, dass WordPress sagt, dass es PHP 7 empfiehlt, aber es funktioniert nicht damit. Was fehlt mir hier?
mysql_connect
wird nur als Fallback verwendet, wennmysqli
es nicht erkannt wird. Es scheint, Sie haben keinemysqli
odermysql
installiert (mysqli
wird empfohlen,mysql
ist veraltet)Antworten:
Dies 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 älteremysql
Erweiterung war seitdem veraltet und vollständig eingestellt. Wenn Sie ein Upgrade von einer sehr alten PHP-Version durchgeführt haben, müssen Sie möglicherweise noch den zusätzlichen Schritt zum Aktivieren ausführenmysqli
.(WordPress prüft,
mysqli
ob und nur wenn es nicht existiert, versucht es mit den älterenmysql
Funktionen.)quelle
Zusätzlich zur Antwort von @MarkKaplun poste ich einen Code aus der wpdb-Klasse:
So
wpdb::use_mysqli
wird das bestimmt:Es ist initialisiert mit:
und dann
wpdb
haben wir im Konstruktor:quelle
Um dieses Problem zu lösen, müssen Sie Ihre Datei php.ini bearbeiten.
lauf wo
php.ini
ich meine gefunden habe bei:/etc/php/php.ini
(obwohl ich nicht weiß, welches Betriebssystem Sie verwenden, finden Sie einfach Ihr)Suchen Sie nach diesen beiden Dateien:
und kommentiere sie aus. Voila, das würde den Job jederzeit erledigen.
Weiterführende Literatur: https://wiki.archlinux.org/index.php/PHP
quelle
Verwenden Sie Xamppp 7.x für Windows?
Es ist mir passiert, als ich mein Xampp 5.6 auf Xampp 7.1 aktualisiert habe. Bei der Überprüfung der Konfigurationsdatei C: \ Xampp \ php \ php.ini sind mir viele Fehler beim 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:
Die richtige Einstellung (nach dem Bearbeiten dieser Zeile):
Das zu beheben löste mein Problem.
Übrigens: Vergessen Sie nicht, alle anderen falschen Einstellungen zu korrigieren (der korrekte Name der Erweiterungen ist unter C: \ xampp \ php \ ext zu sehen).
quelle