Signatur
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
'') 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);
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);
// 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.