Signatur
Beschreibung
mysqli_error_list() liefert ein Array mit allen Fehlern, die beim zuletzt ausgeführten Befehl auf der angegebenen Datenbankverbindung aufgetreten sind. Jeder Eintrag im Array ist ein assoziatives Array mit den Schlüsseln errno (Fehlernummer), sqlstate (SQL-Status-Code nach ANSI-Standard) und error (menschenlesbare Fehlermeldung).
Im Gegensatz zu mysqli_error(), das nur den letzten Fehlertext zurückgibt, und mysqli_errno(), das nur die letzte Fehlernummer zurückgibt, kann mysqli_error_list() mehrere Fehler in einem Aufruf erfassen – besonders hilfreich, wenn Stored Procedures oder Multi-Statement-Abfragen mehrere Fehler auf einmal erzeugen können.
Die Funktion steht sowohl als prozedurale Variante (mysqli_error_list($verbindung)) als auch als objektorientierte Methode ($mysqli->error_list) zur Verfügung. Ist kein Fehler aufgetreten, wird ein leeres Array zurückgegeben.
Diese Funktion ist besonders nützlich beim Debugging und bei der strukturierten Fehlerprotokollierung, da alle relevanten Fehlerinformationen (Nummer, SQL-State, Text) in einem einzigen Aufruf abgerufen werden können.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Ein gültiges mysqli-Verbindungsobjekt, das von mysqli_connect() oder mysqli_init() zurückgegeben wurde. |
Rückgabewert
errno (int, MySQL-Fehlernummer), sqlstate (string, fünfstelliger SQL-State-Code) und error (string, Fehlerbeschreibung). Sind keine Fehler aufgetreten, wird ein leeres Array zurückgegeben.Beispiele
Fehlerbehandlung nach einer fehlgeschlagenen Abfrage
<?php
$mysqli = mysqli_connect('localhost', 'benutzer', 'passwort', 'testdb');
if (!$mysqli) {
die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}
// Absichtlich fehlerhafte Abfrage
mysqli_query($mysqli, 'SELECT * FROM nicht_existente_tabelle');
$fehlerListe = mysqli_error_list($mysqli);
if (!empty($fehlerListe)) {
foreach ($fehlerListe as $fehler) {
echo 'Fehlernummer : ' . $fehler['errno'] . PHP_EOL;
echo 'SQL-State : ' . $fehler['sqlstate'] . PHP_EOL;
echo 'Fehlermeldung: ' . $fehler['error'] . PHP_EOL;
echo '---' . PHP_EOL;
}
} else {
echo 'Keine Fehler aufgetreten.';
}
mysqli_close($mysqli);
Objektorientierte Verwendung mit Fehlerprotokollierung
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Fehlerhafte Abfrage mit ungültiger Syntax
$mysqli->query('INSRT INTO benutzer (name) VALUES ("Max")');
// Fehler über die error_list-Eigenschaft auslesen
foreach ($mysqli->error_list as $fehler) {
error_log(sprintf(
'[DB-Fehler] SQLSTATE %s | Errno %d: %s',
$fehler['sqlstate'],
$fehler['errno'],
$fehler['error']
));
}
if (!empty($mysqli->error_list)) {
echo 'Datenbankfehler aufgetreten – Details wurden protokolliert.';
}
$mysqli->close();
// Wichtig · Fallstricke
Sicherheitshinweis: Fehlermeldungen aus mysqli_error_list() sollten niemals ungefiltert an den Endbenutzer ausgegeben werden, da sie interne Datenbankstruktur-Informationen (Tabellennamen, Feldnamen etc.) preisgeben können. Verwende diese Funktion ausschließlich für das interne Logging oder die Entwicklungs-Ausgabe.
Achtung: Die Fehlerliste wird nach jedem neuen MySQLi-Befehl zurückgesetzt. Der Aufruf von mysqli_error_list() muss daher unmittelbar nach dem fehlerhaften Befehl erfolgen, bevor eine weitere Datenbankoperation durchgeführt wird.
Im objektorientierten Stil kann die Fehlerliste auch direkt über die Eigenschaft $mysqli->error_list abgerufen werden, ohne einen Funktionsaufruf.