Umstellung von der PHP-Funktion mysql() zu mysqli()

Zur Zeit stellen viele Provider auf PHP 7 um, mit dieser neuen PHP-Version werden viele alte Scripte nicht mehr laufen die auf eine Datenbank zugegriffen haben.

Konkret funktioniert die Funktion: mysql() nicht mehr, diese wurde durch mysqli() ersetzt. Hier zeige ich anhand von Beispielen wie Sie Ihre Scripte auf die neue Funktion umstellen können.

Als erstes fällt hier die Ähnlichkeit der Funktionen auf: mysql() / mysqli(). Viele Funktionen lassen sich dadurch ändern indem man einfach ein i der mysql()-Funktion hinzufügt.

Verbindungskennung

Einige mysqli()-Funktionen benötigen eine Verbindungskennung, das ist eine PHP-Variable die bei der Verbindung zur Datenbank erzeugt wird, hier in diesen Beispielen heißt diese: $link.


<?php
// mysql() Verbindung herstellen:
mysql_connect("localhost""root""""test");

// mysqli() Verbindung herstellen:
$link mysqli_connect("localhost""root""""test");
?>

Auslesen von Daten aus der DB-Tabelle


<?php
$link 
mysqli_connect("localhost""root""""test");

// Datensätze auslesen (Beispiel)
 
$datensaetze mysqli_query($link,
 
"SELECT `name`, `text`, `datum` FROM `nachrichten`");

// Datensätze ausgeben
while (list($name$text$datum) = mysqli_fetch_array($datensaetze)) {
 echo 
"<p>$name - $titel - $text - $datum</p>";
}
?>

Die Funktion: mysqli_query() benötigt eine Verbindungskennung, die Funktion: mysqli_fetch_array() jedoch keine!

Folgende Funktionen benötigen eine Verbindungskennung:

mysqli_query() (Link zu php.net)
mysqli_set_charset()
mysqli_real_escape_string()
mysqli_insert_id()
...

Welche Funktionen Sie nun ändern müssen hängt von Ihrem PHP-Script ab, Sie sollten erst auf php.net nach schauen welche Parameter die Funktionen benötigen.

Daten von einem Formular in die DB-Tabelle einfügen

Damit keine schadhaften Daten vom Formular in die DB-Tabelle gelangen benutzt man die sperrige Funktion mysqli_real_escape_string(). In vielen alten PHP-Scripten wurde diese Funktion (mysql_real_escape_string()) einfach zwischen den Query-String eingefügt.


<?php
if (isset($_POST["name"])) {
 
$link mysqli_connect("localhost""root""""test");

 
mysqli_query($link"INSERT INTO `nachrichten` (name) VALUES ('" .
   
mysqli_real_escape_string($link$_POST["name"]) . "')");
}
?>
<form method="post">
<label>Name: <input type="text" name="name"></label>
<input type="submit" value="Absenden">
</form>

Fazit

Die Umstellung auf die neue mysqli()-Funktion ist nicht ganz einfach aber durchaus machbar. Bleibt nur noch die Frage warum man nicht bei der mysql()-Funktion geblieben ist? Die Verbindungskennung war in der alten Funktion optional jetzt muss diese angegeben werden. Außerdem wurden u.a. Prepared Statements hinzugefügt die das eintragen in die DB-Tabelle sicherer machen.

Tipps

Erster Eintrag in eine MySQL-Datenbank mit PHP
Eine Anleitung wie man ein Nachrichten-System mit einer MySQL (oder MariaDB)-Datenbank über PHP realisieren kann. Komplett mit Formularen zum eintragen, anzeigen und bearbeiten der Daten.
Bilder in den Browser laden per File API
Wenn Bilder hoch geladen werden sollen, ist es für dem Benutzer wissenswert welche Bilder er überhaupt ausgewählt hat. Diese JavaScript-Funktion zeigt Bilder vor dem hochladen im Browser an.
Eine MySQL-Tabelle über Links sortieren
Tabellen haben oft den Nachteil das diese nicht vom Benutzer sortiert werden können, dabei ist es eigentlich ganz einfach.
Diese Schlagwörter könnten Sie interessieren:
Linkliste ASCII Berechnungen Mehrfachauswahl MySQL Zugriffsrechte Zeichnen AJAX Sicherheit Responsiv Favicon Dynamische Seiten Metadaten Zeitbalken Zeitfunktionen Rahmen RSS Feed PHP-Fehlermeldungen JSON Datenschutz-Hinweis