Signatur
Beschreibung
mysqli_stmt_error_list() liefert ein Array mit detaillierten Fehlerinformationen zur zuletzt ausgeführten mysqli_stmt-Anweisung. Jeder Eintrag im Array ist selbst ein assoziatives Array mit den Schlüsseln errno (Fehlernummer), sqlstate (SQLSTATE-Code) und error (Klartextmeldung).
Die Funktion ist besonders nützlich, wenn mehrere Fehler aufgetreten sind oder wenn sowohl die numerische Fehlernummer als auch der standardisierte SQLSTATE-Code benötigt werden – zum Beispiel bei der portablen Fehlerbehandlung über verschiedene Datenbanksysteme hinweg. Im Unterschied zu mysqli_stmt_error() oder mysqli_stmt_errno(), die nur den letzten Fehler als Skalar zurückgeben, erlaubt diese Funktion die vollständige Analyse aller aufgetretenen Fehler.
Sind keine Fehler aufgetreten, wird ein leeres Array zurückgegeben. Die Funktion steht sowohl als prozedurale Variante (mysqli_stmt_error_list($stmt)) als auch als objektorientierte Methode ($stmt->error_list) zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | mysqli_stmt | Ein mysqli_stmt-Objekt, das von mysqli_prepare() oder mysqli_stmt_init() zurückgegeben wurde. |
Rückgabewert
errno (int, MySQL-Fehlernummer), sqlstate (string, fünfstelliger SQLSTATE-Code) und error (string, Fehlerbeschreibung im Klartext). Ist kein Fehler aufgetreten, wird ein leeres Array zurückgegeben.Beispiele
Fehler einer fehlgeschlagenen vorbereiteten Anweisung auslesen
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Absichtlich eine fehlerhafte Anweisung vorbereiten
$stmt = $mysqli->prepare('SELECT * FROM nicht_vorhandene_tabelle WHERE id = ?');
if (!$stmt) {
// Vorbereitung schlug fehl – Fehler über das Statement-Objekt auslesen
// Hier nutzen wir mysqli_stmt_init + bind für Demo-Zwecke
echo 'Prepare-Fehler: ' . $mysqli->error;
} else {
$stmt->bind_param('i', $id);
$id = 1;
$stmt->execute();
$fehlerListe = mysqli_stmt_error_list($stmt);
if (!empty($fehlerListe)) {
foreach ($fehlerListe as $fehler) {
echo 'Fehlernummer : ' . $fehler['errno'] . PHP_EOL;
echo 'SQLSTATE : ' . $fehler['sqlstate'] . PHP_EOL;
echo 'Meldung : ' . $fehler['error'] . PHP_EOL;
}
} else {
echo 'Keine Fehler aufgetreten.';
}
$stmt->close();
}
$mysqli->close();
Objektorientierte Variante über die Eigenschaft error_list
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');
$stmt = $mysqli->prepare('INSERT INTO readonly_tabelle (name) VALUES (?)');
if ($stmt) {
$stmt->bind_param('s', $name);
$name = 'Testname';
$stmt->execute();
// Objektorientierter Zugriff auf die Fehlerliste
foreach ($stmt->error_list as $fehler) {
printf(
"[%d / %s] %s\n",
$fehler['errno'],
$fehler['sqlstate'],
$fehler['error']
);
}
$stmt->close();
}
$mysqli->close();
// Wichtig · Fallstricke
Leeres Array vs. Fehler: Ein leeres Rückgabe-Array bedeutet, dass kein Fehler aufgetreten ist – nicht, dass die Funktion selbst fehlgeschlagen ist. Prüfe daher stets mit empty() oder count().
Unterschied zu verwandten Funktionen: Für einfache Anwendungsfälle reichen mysqli_stmt_error() (Klartextmeldung) und mysqli_stmt_errno() (Fehlernummer) aus. mysqli_stmt_error_list() ist dann sinnvoll, wenn alle Details strukturiert weiterverarbeitet oder protokolliert werden sollen.
Objektorientierter Zugriff: Über die Eigenschaft $stmt->error_list ist dieselbe Information ohne Funktionsaufruf erreichbar, was in OOP-Code lesbarer sein kann.