Warum passiert das?
Die gesamte
ext/mysql
PHP-Erweiterung, die alle mit dem Präfixmysql_
benannten Funktionen bereitstellt , war in PHP v5.5.0 offiziell veraltet und in PHP v7 entfernt .Es wurde ursprünglich in PHP v2.0 (November 1997) für MySQL v3.20 eingeführt, und seit 2006 wurden keine neuen Funktionen hinzugefügt. Verbunden mit dem Fehlen neuer Funktionen sind Schwierigkeiten bei der Pflege eines solchen alten Codes inmitten komplexer Sicherheitslücken.
Das Handbuch enthält seit Juni 2011 Warnungen vor der Verwendung in neuem Code.
Wie kann ich es beheben?
Wie die Fehlermeldung andeutet, gibt es zwei weitere MySQL-Erweiterungen, die Sie in Betracht ziehen können:MySQLi und PDO_MySQL , die beide anstelle von
ext/mysql
verwendet werden können . Beide befinden sich seit Version 5.0 im PHP-Kern. Wenn Sie also eine Version verwenden, die diese Verfallsfehler auslöst, können Sie sie mit ziemlicher Sicherheit sofort verwenden – d.h. ohne Installationsaufwand.Sie unterscheiden sich geringfügig, bieten aber eine Reihe von Vorteilen gegenüber der alten Erweiterung, einschließlich API-Unterstützung für Transaktionen, gespeicherte Prozeduren und vorbereitete Anweisungen (wodurch der beste Weg um SQL-Injection-Angriffe abzuwehren ). PHP-Entwickler Ulf Wendel hat einen gründlichen Vergleich geschrieben die Funktionen .
Hashphp.org hat ein exzellentes Tutorial zur Migration von
ext/mysql
zu PDO .Ich verstehe, dass es möglich ist, Verfallsfehler zu unterdrücken, indem man
error_reporting
einstellt inphp.ini
umE_DEPRECATED
auszuschließen :error_reporting = E_ALL ^ E_DEPRECATED
Was passiert, wenn ich das tue?
Ja, es ist möglich, solche Fehlermeldungen zu unterdrücken und weiterhin das alte
ext/mysql
zu verwenden Verlängerung vorerst. Aber sollten Sie das wirklich nicht tun – Dies ist eine letzte Warnung der Entwickler, dass die Erweiterung möglicherweise nicht mit zukünftigen Versionen von PHP gebündelt wird (tatsächlich wurde sie, wie bereits erwähnt, aus PHP v7 entfernt). Stattdessen sollten Sie diese Gelegenheit nutzen, um Ihre Anwendung jetzt zu migrieren , bevor es zu spät ist.Beachten Sie auch, dass diese Technik alle unterdrückt
E_DEPRECATED
Nachrichten, nicht nur die, die mitext/mysql
zu tun haben Erweiterung:Daher sind Ihnen möglicherweise andere bevorstehende Änderungen an PHP nicht bekannt, die sich auf Ihren Anwendungscode auswirken würden. Es ist natürlich möglich, nur Fehler zu unterdrücken, die bei dem betreffenden Ausdruck auftreten, indem PHPs Fehlerkontrolloperator -d. h. indem Sie der entsprechenden Zeile@
voranstellen – dies wird jedoch alle unterdrücken Fehler, die von diesem Ausdruck ausgelöst werden, nicht nur vonE_DEPRECATED
diejenigen.
Was sollten Sie tun?
-
Sie starten ein neues Projekt.
Es gibt absolut keinen Grund um
ext/mysql
zu verwenden – Wählen Sie stattdessen eine der anderen, moderneren Erweiterungen und profitieren Sie von den Vorteilen, die sie bieten. -
Sie haben (Ihre eigene) Legacy-Codebasis, die derzeit von
ext/mysql
abhängt .Es wäre ratsam, einen Regressionstest durchzuführen:Sie sollten wirklich nichts ändern (insbesondere das Aktualisieren von PHP), bis Sie alle potenziellen Einflussbereiche identifiziert, um jeden herum geplant und Ihre Lösung dann gründlich in einer Staging-Umgebung getestet haben.
-
Nach guter Programmierpraxis wurde Ihre Anwendung lose integriert/modular entwickelt, und die Datenbankzugriffsmethoden befinden sich alle in sich geschlossen an einem Ort, der leicht gegen eine der neuen Erweiterungen ausgetauscht werden kann.
Verbringen Sie eine halbe Stunde damit, dieses Modul neu zu schreiben, um eine der anderen, moderneren Erweiterungen zu verwenden; gründlich testen. Sie können später weitere Verfeinerungen einführen, um von den Vorteilen zu profitieren, die sie bieten.
-
Die Datenbankzugriffsmethoden sind überall verstreut und können nicht einfach gegen eine der neuen Erweiterungen ausgetauscht werden.
Überlegen Sie, ob Sie zu diesem Zeitpunkt wirklich auf PHP v5.5 aktualisieren müssen.
Sie sollten mit der Planung beginnen,
ext/mysql
zu ersetzen mit einer der anderen, moderneren Erweiterungen, damit Sie von den Vorteilen profitieren können, die sie bieten; Sie könnten es auch als Gelegenheit nutzen, Ihre Datenbankzugriffsmethoden in eine modularere Struktur umzugestalten.Wenn Sie jedoch dringend haben Wenn Sie PHP sofort aktualisieren müssen, könnten Sie erwägen, Verfallsfehler vorerst zu unterdrücken:Stellen Sie jedoch zuerst sicher, dass Sie alle anderen Verfallsfehler identifizieren, die ebenfalls ausgegeben werden.
-
-
Sie verwenden ein Drittanbieterprojekt, das von
ext/mysql
abhängt .Überlegen Sie, ob Sie zu diesem Zeitpunkt wirklich auf PHP v5.5 aktualisieren müssen.
Überprüfen Sie, ob der Entwickler Korrekturen, Problemumgehungen oder Anleitungen in Bezug auf dieses spezielle Problem veröffentlicht hat; oder, wenn nicht, drängen Sie sie dazu, indem Sie sie auf diese Angelegenheit aufmerksam machen. Wenn Sie dringend haben Wenn Sie PHP sofort aktualisieren müssen, könnten Sie erwägen, Verfallsfehler vorerst zu unterdrücken:Stellen Sie jedoch zuerst sicher, dass Sie alle anderen Verfallsfehler identifizieren, die ebenfalls ausgegeben werden.
Regressionstests müssen unbedingt durchgeführt werden.