Start · Sprachen · PHP · Referenz · ibase_errmsg

ibase_errmsg

Funktion

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

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_errmsg(): string|false

Beschreibung

ibase_errmsg() liefert die Klartextbeschreibung des letzten Fehlers, der bei einer InterBase- oder Firebird-Datenbankoperation aufgetreten ist. Die Funktion ergänzt ibase_errcode(), die den numerischen Fehlercode zurückgibt.

Sie wird typischerweise unmittelbar nach einer fehlgeschlagenen Datenbankoperation aufgerufen – z. B. nach ibase_query(), ibase_execute() oder ibase_connect() – um dem Entwickler oder Benutzer eine aussagekräftige Fehlermeldung bereitzustellen.

Die Fehlermeldung bezieht sich immer auf den zuletzt aufgetretenen Fehler der aktuellen Verbindung. Wurde kein Fehler ausgelöst, gibt die Funktion false zurück. Es empfiehlt sich, die Rückgabe stets mit === false zu prüfen, um den fehlerfreien Zustand sicher zu erkennen.

Hinweis: Die ibase_*-Funktionen (auch als fbird_* verfügbar) sind seit PHP 7.4 aus dem PHP-Kern entfernt und stehen nur noch über die PECL-Erweiterung ibase zur Verfügung.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die Fehlermeldung des letzten InterBase/Firebird-Fehlers als string zurück. Wurde kein Fehler ausgelöst, wird false zurückgegeben.

Beispiele

Fehlerbehandlung nach fehlgeschlagener Abfrage

<?php
$conn = ibase_connect('localhost:employee.fdb', 'sysdba', 'masterkey');

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

$result = ibase_query($conn, 'SELECT * FROM nicht_vorhandene_tabelle');

if (!$result) {
    $errorCode = ibase_errcode();
    $errorMsg  = ibase_errmsg();
    echo "Datenbankfehler [{$errorCode}]: {$errorMsg}" . PHP_EOL;
}

ibase_close($conn);
Datenbankfehler [-204]: Dynamic SQL Error\nSQL error code = -204\nTable unknown\nNICHT_VORHANDENE_TABELLE

Allgemeine Hilfsfunktion zur Fehlerprotokollierung

<?php
function handleIbaseError(string $context): void {
    $msg  = ibase_errmsg();
    $code = ibase_errcode();

    if ($msg !== false) {
        error_log("[Firebird] {$context} | Code: {$code} | Meldung: {$msg}");
        throw new RuntimeException("Datenbankfehler in '{$context}': {$msg}", $code);
    }
}

$conn = ibase_connect('localhost:mydb.fdb', 'sysdba', 'masterkey');

try {
    $res = ibase_query($conn, 'INSERT INTO orders (invalid_col) VALUES (1)');
    if (!$res) {
        handleIbaseError('INSERT in orders');
    }
} catch (RuntimeException $e) {
    echo 'Fehler abgefangen: ' . $e->getMessage() . PHP_EOL;
} finally {
    ibase_close($conn);
}
Fehler abgefangen: Datenbankfehler in 'INSERT in orders': Dynamic SQL Error\nSQL error code = -206\nColumn unknown\nINVALID_COL

// Wichtig · Fallstricke

Deprecation / Entfernung: Die ibase_*-Erweiterung wurde mit PHP 7.4 aus dem offiziellen PHP-Kern ausgelagert. Ab PHP 8.0 ist sie nur noch über PECL verfügbar. Für neue Projekte sollte stattdessen eine moderne Datenbankabstraktionsschicht (z. B. PDO mit dem Firebird-Treiber) verwendet werden.

Alternativ steht dieselbe Funktionalität unter dem Alias fbird_errmsg() zur Verfügung, der in manchen Installationen bevorzugt verwendet wird.

Da ibase_errmsg() immer den letzten globalen Fehler zurückgibt, sollte sie unmittelbar nach der fehlschlagenden Operation aufgerufen werden, bevor weitere Datenbankoperationen den Fehlerzustand überschreiben können.