Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die mysql-Erweiterung ist veraltet und wird in Zukunft entfernt:Verwenden Sie stattdessen mysqli oder PDO

  1. Warum passiert das?

    Die gesamte ext/mysql PHP-Erweiterung, die alle mit dem Präfix mysql_ 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.

  2. 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 .

  3. Ich verstehe, dass es möglich ist, Verfallsfehler zu unterdrücken, indem man error_reporting einstellt in php.ini um E_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 mit ext/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 von E_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.