Start · Sprachen · PHP · Referenz · odbc_error

odbc_error

Funktion

Gibt den SQLSTATE-Fehlercode der letzten ODBC-Operation zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_error(resource|null $odbc = null): string

Beschreibung

odbc_error() liefert den SQLSTATE-Fehlercode (ein fünfstelliger alphanumerischer Code gemäß ISO/IEC 9075-Standard) der letzten fehlgeschlagenen ODBC-Operation. Wird keine Verbindungsressource übergeben, bezieht sich der Fehlercode auf die zuletzt verwendete ODBC-Verbindung.

Die Funktion wird typischerweise nach einer fehlgeschlagenen ODBC-Funktion wie odbc_exec(), odbc_connect() oder odbc_fetch_row() aufgerufen, um den aufgetretenen Fehler zu identifizieren. Sie arbeitet eng mit odbc_errormsg() zusammen, die eine lesbare Fehlermeldung zurückgibt.

Der SQLSTATE-Code besteht aus fünf Zeichen und folgt dem ISO-Standard: Die ersten beiden Zeichen kennzeichnen die Fehlerklasse (z. B. 42 für Syntaxfehler), die letzten drei den Subcode. Ein leerer String wird zurückgegeben, wenn kein Fehler aufgetreten ist.

Für eine vollständige Fehlerdiagnose empfiehlt es sich, sowohl odbc_error() als auch odbc_errormsg() zu verwenden und beide Informationen zu protokollieren.

Parameter

Name Typ Default Beschreibung
$odbc resource|null null Eine ODBC-Verbindungsressource, die von odbc_connect() oder odbc_pconnect() zurückgegeben wurde. Wird null übergeben oder der Parameter weggelassen, wird die zuletzt verwendete Verbindung herangezogen.

Rückgabewert

Typ
string
Beschreibung
Gibt den SQLSTATE-Fehlercode als fünfstelligen String zurück. Ist kein Fehler aufgetreten, wird ein leerer String ('') zurückgegeben.

Beispiele

Fehlerbehandlung nach fehlgeschlagenem SQL-Befehl

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if (!$conn) {
    echo 'Verbindungsfehler: ' . odbc_errormsg();
    exit;
}

$result = odbc_exec($conn, 'SELECT * FROM nicht_existierende_tabelle');

if (!$result) {
    $fehlercode = odbc_error($conn);
    $fehlermeldung = odbc_errormsg($conn);
    echo "SQLSTATE: $fehlercode\n";
    echo "Meldung:  $fehlermeldung\n";
}

odbc_close($conn);
SQLSTATE: 42S02 Meldung: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'nicht_existierende_tabelle'.

Fehlerprotokollierung in eine Log-Datei

<?php
function odbc_log_error(resource $conn, string $context): void {
    $code = odbc_error($conn);
    $msg  = odbc_errormsg($conn);

    if ($code !== '') {
        $logEintrag = sprintf(
            "[%s] Kontext: %s | SQLSTATE: %s | Meldung: %s\n",
            date('Y-m-d H:i:s'),
            $context,
            $code,
            $msg
        );
        file_put_contents('/var/log/odbc_errors.log', $logEintrag, FILE_APPEND);
    }
}

$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
$result = odbc_exec($conn, 'UNGÜLTIGES SQL !!!');

if (!$result) {
    odbc_log_error($conn, 'Berichtsabfrage');
    echo "Ein Datenbankfehler ist aufgetreten. Details wurden protokolliert.\n";
}

odbc_close($conn);
Ein Datenbankfehler ist aufgetreten. Details wurden protokolliert.

// Wichtig · Fallstricke

Fehlercode vs. Fehlermeldung: odbc_error() liefert nur den standardisierten SQLSTATE-Code. Für eine ausführliche, treiberspezifische Fehlermeldung sollte immer zusätzlich odbc_errormsg() verwendet werden.

Geltungsbereich: Der Fehlercode wird mit jeder neuen ODBC-Operation überschrieben. Er sollte daher unmittelbar nach einer fehlgeschlagenen Operation ausgelesen werden, bevor weitere ODBC-Aufrufe erfolgen.

Veraltete Ressourcen: Ab PHP 8.0 werden ODBC-Verbindungen als \ODbc\Connection-Objekte zurückgegeben; die Funktion selbst ist jedoch weiterhin verfügbar. Bei der Migration auf PDO_ODBC stehen dort eigene Fehlerbehandlungsmechanismen (PDO::errorCode()) bereit.