Start · Sprachen · PHP · Referenz · fbird_errmsg

fbird_errmsg

Funktion

Gibt die Fehlermeldung des zuletzt aufgetretenen Firebird/InterBase-Datenbankfehlers zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_errmsg(): string|false

Beschreibung

fbird_errmsg() liefert den Fehlertext des zuletzt aufgetretenen Fehlers bei einer Firebird- oder InterBase-Datenbankoperation. Die Funktion ist das textuelle Gegenstück zu fbird_errcode(), das den numerischen Fehlercode zurückgibt.

Typischerweise wird fbird_errmsg() direkt nach einer fehlgeschlagenen Datenbankoperation aufgerufen, um eine aussagekräftige Fehlermeldung für Logging- oder Debugging-Zwecke zu erhalten. Sie sollte stets in Kombination mit einer Fehlerprüfung des vorangegangenen Datenbankaufrufs verwendet werden.

Hinweis: fbird_errmsg() ist ein Alias für ibase_errmsg(). Beide Funktionen greifen auf denselben internen Fehlerpuffer zu, der bei jeder neuen Datenbankoperation überschrieben wird.

Die Funktion gibt false zurück, wenn kein Fehler aufgetreten ist oder der Fehlerpuffer leer ist. Im Fehlerfall enthält die Rückgabe den vollständigen Fehlertext des Firebird/InterBase-Treibers, was die Ursachenanalyse erheblich vereinfacht.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die Fehlermeldung des letzten Firebird/InterBase-Fehlers als string zurück. Wenn kein Fehler aufgetreten ist oder der Fehlerpuffer leer ist, wird false zurückgegeben.

Beispiele

Fehlermeldung nach fehlgeschlagenem Query ausgeben

<?php
$dbh = fbird_connect('localhost:/pfad/zur/datenbank.fdb', 'sysdba', 'masterkey');

if ($dbh === false) {
    die('Verbindung fehlgeschlagen: ' . fbird_errmsg());
}

$result = fbird_query($dbh, 'SELECT * FROM nicht_vorhandene_tabelle');

if ($result === false) {
    $fehler = fbird_errmsg();
    echo 'Datenbankfehler: ' . htmlspecialchars($fehler) . PHP_EOL;
} else {
    // Ergebnis verarbeiten
    while ($row = fbird_fetch_assoc($result)) {
        print_r($row);
    }
    fbird_free_result($result);
}

fbird_close($dbh);
Datenbankfehler: Dynamic SQL Error\nSQL error code = -204\nTable unknown\nNICHT_VORHANDENE_TABELLE

Zentralisierte Fehlerbehandlung mit fbird_errmsg

<?php
function db_query_safe($dbh, string $sql, array $params = []) {
    $result = fbird_query($dbh, $sql, ...$params);
    if ($result === false) {
        $errCode = fbird_errcode();
        $errMsg  = fbird_errmsg();
        error_log(sprintf('[Firebird] Fehlercode %d: %s | SQL: %s', $errCode, $errMsg, $sql));
        throw new RuntimeException('Datenbankfehler: ' . $errMsg, $errCode);
    }
    return $result;
}

try {
    $dbh = fbird_connect('localhost:/data/myapp.fdb', 'sysdba', 'masterkey');
    $res = db_query_safe($dbh, 'SELECT ID, NAME FROM USERS WHERE ACTIVE = ?', [1]);
    while ($row = fbird_fetch_assoc($res)) {
        echo $row['ID'] . ': ' . $row['NAME'] . PHP_EOL;
    }
    fbird_free_result($res);
    fbird_close($dbh);
} catch (RuntimeException $e) {
    echo 'Fehler: ' . htmlspecialchars($e->getMessage()) . PHP_EOL;
}

// Wichtig · Fallstricke

Deprecation: Die ibase_*- und fbird_*-Funktionen gehören zur ibase-Erweiterung, die ab PHP 7.4 aus dem PHP-Kern entfernt und in PECL ausgelagert wurde. Für neue Projekte sollte eine alternative Datenbankabstraktionsschicht oder PDO mit einem geeigneten Firebird-Treiber verwendet werden.

Fehlerpuffer: Der interne Fehlerpuffer wird bei jeder neuen Datenbankoperation überschrieben. fbird_errmsg() muss daher unmittelbar nach der fehlgeschlagenen Operation aufgerufen werden, bevor weitere Datenbankbefehle ausgeführt werden.

Sicherheit: Fehlermeldungen aus fbird_errmsg() können interne Informationen wie Tabellennamen, Spaltennamen oder Datenbankpfade enthalten. Diese sollten niemals unbereinigt an Endbenutzer ausgegeben werden — immer htmlspecialchars() verwenden und detaillierte Fehlertexte nur ins Server-Log schreiben.