Start · Sprachen · PHP · Referenz · db2_stmt_error

db2_stmt_error

Funktion

Gibt den SQLSTATE-Fehlercode der zuletzt ausgeführten SQL-Anweisung zurück.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_stmt_error(resource $stmt = null): string

Beschreibung

db2_stmt_error() liefert den fünfstelligen alphanumerischen SQLSTATE-Code, der dem zuletzt aufgetretenen Fehler bei der Ausführung einer SQL-Anweisung entspricht. SQLSTATE-Codes sind standardisiert (ISO/ANSI SQL) und datenbankübergreifend portabel, was sie für eine strukturierte Fehlerbehandlung besonders geeignet macht.

Die Funktion kann optional eine Anweisungsressource ($stmt) entgegennehmen, die mit db2_prepare() oder db2_exec() erzeugt wurde. Wird kein Argument übergeben, bezieht sich der Rückgabewert auf die zuletzt ausgeführte Anweisung der aktuellen Verbindung.

Für eine ausführlichere, menschenlesbare Fehlermeldung sollte db2_stmt_errormsg() ergänzend verwendet werden. Beide Funktionen arbeiten gut zusammen, um sowohl maschinenlesbare als auch beschreibende Fehlerinformationen bereitzustellen.

Typischer Einsatz ist die Überprüfung nach fehlgeschlagenen Aufrufen von db2_execute(), db2_exec() oder db2_fetch_row(), um gezielt auf bestimmte Fehlerzustände (z. B. 42S02 für fehlende Tabelle) reagieren zu können.

Parameter

Name Typ Default Beschreibung
$stmt resource null Eine Anweisungsressource, die von db2_prepare() oder db2_exec() zurückgegeben wurde. Wird kein Wert übergeben, bezieht sich der Fehlercode auf die zuletzt fehlgeschlagene Anweisung.

Rückgabewert

Typ
string
Beschreibung
Gibt einen fünfstelligen SQLSTATE-Code als Zeichenkette zurück (z. B. '42S02', '23000'). Ist kein Fehler aufgetreten, wird ein leerer String zurückgegeben.

Beispiele

Fehlerbehandlung nach fehlgeschlagenem db2_exec()

<?php
$conn = db2_connect('SAMPLE', 'db2inst1', 'geheim');

if ($conn) {
    // Absichtlich fehlerhafte Abfrage (Tabelle existiert nicht)
    $result = db2_exec($conn, 'SELECT * FROM nicht_vorhandene_tabelle');

    if (!$result) {
        $sqlstate = db2_stmt_error();
        $message  = db2_stmt_errormsg();
        echo "SQLSTATE: " . $sqlstate . PHP_EOL;
        echo "Fehlermeldung: " . $message . PHP_EOL;
    }

    db2_close($conn);
}
SQLSTATE: 42704 Fehlermeldung: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N "nicht_vorhandene_tabelle" ist ein undefinierter Name. SQLSTATE=42704

SQLSTATE einer vorbereiteten Anweisung auswerten

<?php
$conn = db2_connect('SAMPLE', 'db2inst1', 'geheim');

if ($conn) {
    $sql  = 'INSERT INTO bestellungen (id, produkt) VALUES (?, ?)';
    $stmt = db2_prepare($conn, $sql);

    if ($stmt) {
        // Duplikat-Primärschlüssel provozieren
        $ok = db2_execute($stmt, [1, 'Laptop']);

        if (!$ok) {
            $sqlstate = db2_stmt_error($stmt);

            if ($sqlstate === '23000') {
                echo "Datensatz existiert bereits (Constraint-Verletzung)." . PHP_EOL;
            } else {
                echo "Unbekannter Fehler: " . $sqlstate . PHP_EOL;
            }
        }
    }

    db2_close($conn);
}
Datensatz existiert bereits (Constraint-Verletzung).

// Wichtig · Fallstricke

Hinweis zur Portabilität: SQLSTATE-Codes sind durch den SQL-Standard definiert und können in der Fehlerbehandlung datenbankübergreifend genutzt werden. Herstellerspezifische Fehlercodes liefert stattdessen db2_stmt_errormsg().

Reihenfolge beachten: db2_stmt_error() liefert immer den Fehler der letzten fehlgeschlagenen Operation. Bei mehreren Anweisungen sollte stets die zugehörige Ressource explizit übergeben werden, um Verwechslungen zu vermeiden.

Die Funktion steht nur zur Verfügung, wenn die ibm_db2-Erweiterung installiert und aktiviert ist.