error_list
Erklärung der mysqli_error_list()-Funktion in PHP zum Abrufen aller Fehler des letzten MySQLi-Aufrufs mit errno, sqlstate und Fehlermeldung.
Die Funktion mysqli_error_list() gibt ein array der Fehler zurück, die beim letzten MySQLi-Funktionsaufruf auf einer bestimmten Verbindung aufgetreten sind. Im Gegensatz zu mysqli_error(), das nur die letzte Fehlermeldung als string liefert, gibt mysqli_error_list() alle Fehler dieser Operation zurück — jeden als assoziatives array mit der Fehlernummer, dem SQLSTATE-Code und der lesbaren Fehlermeldung. Diese Seite erläutert die Syntax, den Aufbau der zurückgegebenen Daten und die praktische Verwendung.
Syntax
mysqli_error_list(mysqli $mysql): arrayDer objektorientierte Stil verwendet stattdessen die schreibgeschützte Eigenschaft error_list:
$mysqli->error_list;Parameter
$mysql— Ein MySQLi-Verbindungsobjekt, das vonmysqli_connect()(odermysqli_init()/new mysqli()) zurückgegeben wird.
Rückgabewert
Ein array aus assoziativen arrays. Das array ist leer, wenn kein Fehler aufgetreten ist. Jeder Eintrag enthält drei Schlüssel:
| Schlüssel | Typ | Beschreibung |
|---|---|---|
errno | int | Die MySQL-Fehlernummer (z. B. 1146 für „Tabelle existiert nicht"). |
sqlstate | string | Der fünfstellige SQLSTATE-Fehlercode (z. B. 42S02). |
error | string | Der Fehlermeldungstext. |
Einfaches Beispiel
mysqli_error_list() wird direkt nach der zu prüfenden Operation aufgerufen — typischerweise dann, wenn eine Abfrage fehlgeschlagen ist:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_list = mysqli_error_list($mysqli);
foreach ($error_list as $error) {
echo "Failed to execute query. Error message: " . $error['error'] . "\n";
}
exit();
}
mysqli_close($mysqli);
?>Hier wird eine Verbindung hergestellt, eine Abfrage ausgeführt und das Ergebnis geprüft. Gibt mysqli_query() den Wert false zurück, wird mysqli_error_list() aufgerufen und über das zurückgegebene array iteriert, wobei die error-Meldung jedes Fehlers ausgegeben wird, bevor das Skript beendet wird. Ist die Abfrage erfolgreich, läuft die Schleife schlicht nicht, da das array leer ist.
Fehlercode und SQLSTATE auslesen
Da jeder Eintrag ein assoziatives array ist, können neben der Meldung auch der numerische Code und der SQLSTATE ausgelesen werden — nützlich, um auf bestimmte Fehler zu verzweigen, statt den Meldungstext zu parsen:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_list = mysqli_error_list($mysqli);
foreach ($error_list as $error) {
echo "Failed to execute query. Error message: " . $error['error'] . "\n";
echo "Error code: " . $error['errno'] . "\n";
echo "SQLSTATE error code: " . $error['sqlstate'] . "\n";
}
exit();
}
mysqli_close($mysqli);
?>Dieses Beispiel erweitert das einfache Beispiel, indem für jeden Fehler die numerische errno und der sqlstate-Code ausgegeben werden, was den vollständigen Diagnosekontext liefert.
Objektorientierter Stil
Wenn die Verbindung mit new mysqli() erstellt wird, ist die Eigenschaft error_list zu verwenden:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (!$mysqli->query("SELECT * FROM missing_table")) {
foreach ($mysqli->error_list as $error) {
echo "[{$error['errno']}] {$error['sqlstate']}: {$error['error']}\n";
}
}
$mysqli->close();
?>mysqli_error_list() vs. verwandte Funktionen
mysqli_error()— gibt nur die letzte Fehlermeldung als string zurück. Verwenden Sie diese Funktion, wenn nur eine einzige Meldung benötigt wird.mysqli_errno()— gibt die Fehlernummer des letzten Aufrufs zurück.mysqli_error_list()— gibt alle Fehler des letzten Aufrufs zurück, jeweils miterrno,sqlstateunderror. Verwenden Sie diese Funktion, wenn eine einzige Operation mehrere Probleme aufdecken kann.
Fallstricke
- Die Liste spiegelt nur den letzten MySQLi-Aufruf auf dieser Verbindung wider. Erfassen Sie sie unmittelbar nach der fehlgeschlagenen Operation — ein anschließend erfolgreicher Aufruf löscht sie.
- Eine erfolgreiche Operation gibt ein leeres array zurück, nicht
falseodernull. Prüfen Sie daher mitif (!$result)(oder mitmysqli_errno()), bevor Sie davon ausgehen, dass Fehler vorhanden sind. - Bei Verbindungsfehlern schlägt der Verbindungsschritt selbst fehl, bevor ein nutzbares Objekt vorhanden ist — verwenden Sie dort stattdessen
mysqli_connect_error().
Fazit
mysqli_error_list() bietet strukturierten Zugriff auf alle Fehler der letzten MySQLi-Operation, vollständig mit Fehlernummer, SQLSTATE und Meldung. Greifen Sie darauf zurück, wenn Sie reichhaltigere Diagnoseinformationen benötigen, als mysqli_error() liefert. Zur weiterführenden PHP-Fehlerbehandlung lesen Sie PHP-Fehlerbehandlung und die mysqli-Übersicht.