Start · Sprachen · PHP · Referenz · mysqli_stmt_error_list

mysqli_stmt_error_list

Funktion

Gibt eine Liste aller Fehler zurück, die bei der zuletzt ausgeführten vorbereiteten Anweisung aufgetreten sind.

seit PHP 5.4.0 Kategorie: db

Signatur

mysqli_stmt_error_list(mysqli_stmt $statement): array

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

Typ
array
Beschreibung
Ein Array von assoziativen Arrays. Jedes Element enthält die Schlüssel 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();
Fehlernummer : 1146 SQLSTATE : 42S02 Meldung : Table 'testdb.nicht_vorhandene_tabelle' doesn't exist

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();
[1142 / 42000] INSERT command denied to user 'benutzer'@'localhost' for table 'readonly_tabelle'

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