Umstellung von PHP 5.6 auf PHP 7 – Scripte mit MySQL

Das Ende von PHP 5.6 naht in großen Schritten Ende diesen Jahres. Zuletzt hat unser Provider Hosteurope das Ende angekündigt:

Die Standard PHP Version 5.6 wird am 24.10.2018 deaktiviert. Alle Domains/Verzeichnisse, die zu diesem Zeitpunkt auf PHP 5.6 im KIS eingestellt sind, werden automatisch auf die neue Standard PHP Version 7.2 umgestellt.

Satte vier Jahre wurde PHP 5.6 unterstützt. In Folge dessen sind viele Scripte darauf optimiert bzw. viele ältere Scripte laufen, derzeit noch, hervorragend mit dieser Version, da diese noch zahlreiche Funktionen unterstützt, welche bereits seit Jahren als “deprecated” bzw. veraltet gelten. So wie die alten MySQL-Funktionen. Wer eine Funktion wie mysql_connect aufruft, erhielt bereits ab PHP 5.5 folgende Warnung:

Deprecated: mysql_connect(): The mysql extension is deprecated and will be
removed in the future: use mysqli or PDO instead

Ausgegeben wird diese Warnung nur, wenn der Server entsprechend konfiguriert ist. Viele Server geben im Produktivbetrieb weder Hinweise und Warungen aus, oft auch keine Fehler. Hier verrät erst der Blick in die Logfiles, dass hier ein Problem vorliegt. Die Überraschung ist groß, wenn plötzlich gar nichts mehr geht. Alte Scripte umzustellen ist nicht schwer. Der Aufwand hängt davon ab, wie der Entwickler das Script angelegt hat.

Gibt es eine zentrale Datenbankklasse oder Datenbankschicht? Gut, dann müssen nur hier Änderungen durchgeführt werden. In den Anfangszeiten von PHP wurden Scripte meist frei nach Schnauze entwickelt, d.h. wurden Daten aus der Datenbank benötigt, wurde die Datenbankfunktion direkt aufgerufen. In diesem Fall sind die Funktionsaufrufe für MySQL in allen Scriptdateien enthalten.

Die “Veraltet Meldung” verrät bereits die Lösung: wir müssen unser Script umstellen auf die neuen Datenbankfunktionen. Entweder mysqli oder die PDO-Funktionen. Am einfachsten geht die Umstellung aif mysqli. Hier muss einfach nur ein “i” eingefügt werden. Aus mysql_connect wird mysqli_connect. Gleiches gilt für alle anderen mysql_ Funktionen.

//aus:
$connection = mysqli_connect('localhost', 'username', 'password');
//wird:
$connection = mysqli_connect('localhost', 'username', 'password');

Die neue Funktion erlaubt auch gleich die Auswahl einer Datenbank:

$connection = mysqli_connect('localhost', 'username', 'password', 'database');

Das war einfach! Dennoch gibt es Fallstricke. Einige Funktionen haben eine andere Reihenfolge der Parameter. Dies sind die Funktionen, welche den Datenbanklink als Parameter verwenden, wie die Funktion mysql_query:

$result = mysql_query($sql,$db_link);

Die SQL-Abfrage war hier bisher der erste Parameter, die Datenbankverbindung der Zweite. Dies ändert sich:

$result = mysqli_query($db, $sql);

Somit ist es mit einem simplen dateiübergreifenden Suchen und Ersetzen nicht getan, sofern man nicht in die Kiste der regulären Ausdrücke greift.

Um ein Script umzustellen, müssen also nur alle Vorkommen der MySQL-Funktionen im Quelltext gesucht und angepasst werden. Keine Raketenwissenschaft, sondern Fleiß. Anschließend läuft das Script auch mit PHP 7 wieder, sofern nicht noch andere Funktionen angepasst werden müssen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.