Start · Sprachen · PHP · Referenz · mysqli_error_list

mysqli_error_list

Funktion

Gibt eine Liste aller Fehler zurück, die beim zuletzt ausgeführten MySQLi-Datenbankbefehl aufgetreten sind.

seit PHP 5.4.0 Kategorie: db

Signatur

mysqli_error_list(mysqli $mysql): array

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

Typ
array
Beschreibung
Ein Array von assoziativen Arrays. Jedes innere Array enthält die Schlüssel 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);
Fehlernummer : 1146 SQL-State : 42S02 Fehlermeldung: Table 'testdb.nicht_existente_tabelle' doesn't exist ---

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();
Datenbankfehler aufgetreten – Details wurden protokolliert.

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