Start · Sprachen · PHP · Referenz · db2_stmt_errormsg

db2_stmt_errormsg

Funktion

Gibt die letzte Fehlermeldung zurück, die bei der Ausführung einer SQL-Anweisung über eine IBM DB2-Verbindung aufgetreten ist.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_stmt_errormsg(resource $stmt = null): string

Beschreibung

db2_stmt_errormsg() liefert den Klartext der letzten Fehlermeldung, die bei der Ausführung einer vorbereiteten oder direkt ausgeführten SQL-Anweisung aufgetreten ist. Die Funktion gehört zur IBM DB2 Extension (ibm_db2) und ist besonders nützlich für die Fehlerdiagnose nach fehlgeschlagenen Aufrufen von db2_execute(), db2_exec() oder ähnlichen Anweisungsfunktionen.

Wird ein gültiges Statement-Handle ($stmt) übergeben, liefert die Funktion die Fehlermeldung, die spezifisch für dieses Statement-Handle gespeichert wurde. Wird kein Argument übergeben, gibt die Funktion die zuletzt aufgetretene Fehlermeldung für das zuletzt ausgeführte Statement zurück.

In Kombination mit db2_stmt_error(), das den kurzen SQLSTATE-Fehlercode liefert, lässt sich so eine vollständige Fehlerdiagnose durchführen. Für verbindungsbezogene Fehler (außerhalb von Statements) sollten stattdessen db2_conn_errormsg() und db2_conn_error() verwendet werden.

  • Gibt einen leeren String zurück, wenn kein Fehler aufgetreten ist.
  • Gibt den letzten bekannten Fehlertext zurück, auch wenn kein Statement-Handle angegeben wird.

Parameter

Name Typ Default Beschreibung
$stmt resource null Ein gültiges Statement-Handle, das von db2_prepare() oder db2_exec() zurückgegeben wurde. Wird kein Handle angegeben, bezieht sich die Fehlermeldung auf das zuletzt verwendete Statement.

Rückgabewert

Typ
string
Beschreibung
Gibt einen String mit der Fehlermeldung des letzten fehlgeschlagenen Statement-Aufrufs zurück. Ist kein Fehler aufgetreten, wird ein leerer String zurückgegeben.

Beispiele

Fehlerbehandlung nach fehlgeschlagenem db2_execute()

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

if ($conn) {
    // Absichtlich fehlerhafte SQL-Abfrage
    $sql = 'SELECT * FROM nicht_vorhandene_tabelle WHERE id = ?';
    $stmt = db2_prepare($conn, $sql);

    if ($stmt) {
        $result = db2_execute($stmt, [1]);

        if (!$result) {
            $sqlstate  = db2_stmt_error($stmt);
            $message   = db2_stmt_errormsg($stmt);
            echo "SQLSTATE: $sqlstate\n";
            echo "Fehlermeldung: $message\n";
        }
    } else {
        echo "Statement konnte nicht vorbereitet werden: " . db2_stmt_errormsg() . "\n";
    }

    db2_close($conn);
} else {
    echo "Verbindung fehlgeschlagen.\n";
}
?>
SQLSTATE: 42704 Fehlermeldung: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N "nicht_vorhandene_tabelle" ist ein unbekannter Name. SQLSTATE=42704

Aufruf ohne Statement-Handle nach db2_exec()

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

if ($conn) {
    // Direktausführung einer fehlerhaften SQL-Anweisung
    $result = db2_exec($conn, 'DELETE FORM bestellungen WHERE id = 99');

    if (!$result) {
        // Kein explizites Statement-Handle – globale Fehlermeldung abrufen
        echo "Fehler: " . db2_stmt_errormsg() . "\n";
    }

    db2_close($conn);
}
?>
Fehler: [IBM][CLI Driver][DB2/LINUXX8664] SQL0104N An unexpected token "FORM" was found following "DELETE". SQLSTATE=42601

// Wichtig · Fallstricke

Hinweis zur Extension: db2_stmt_errormsg() steht nur zur Verfügung, wenn die PHP-Extension ibm_db2 installiert und aktiviert ist. Sie ist nicht in der Standard-PHP-Installation enthalten und muss separat über PECL oder das IBM-Repository eingebunden werden.

Fehlerquelle unterscheiden: Verwechseln Sie diese Funktion nicht mit db2_conn_errormsg(). Letztere liefert Verbindungsfehler (z. B. falsches Passwort, Datenbank nicht erreichbar), während db2_stmt_errormsg() ausschließlich Fehler auf Anweisungsebene (SQL-Syntaxfehler, Constraint-Verletzungen usw.) meldet.

Reihenfolge beachten: Die Fehlermeldung wird nach jedem neuen Statement-Aufruf überschrieben. Rufen Sie db2_stmt_errormsg() daher unmittelbar nach dem fehlgeschlagenen Aufruf ab, bevor weitere Datenbankoperationen stattfinden.