Start · Sprachen · PHP · Referenz · fbird_commit

fbird_commit

Funktion

Bestätigt (committet) eine aktive Firebird/InterBase-Transaktion und macht alle Änderungen dauerhaft.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_commit(resource $link_identifier = null): bool

Beschreibung

fbird_commit() beendet eine offene Transaktion auf einer Firebird- oder InterBase-Datenbankverbindung und schreibt alle innerhalb dieser Transaktion vorgenommenen Änderungen (INSERT, UPDATE, DELETE) dauerhaft in die Datenbank. Erst nach dem Commit sind die Daten für andere Verbindungen sichtbar.

Wird kein $link_identifier übergeben, verwendet PHP automatisch die zuletzt geöffnete Verbindung bzw. Transaktion. Es empfiehlt sich jedoch, den Link-Bezeichner immer explizit anzugeben, um bei mehreren gleichzeitig aktiven Verbindungen Verwechslungen zu vermeiden.

Nach einem erfolgreichen Commit ist die Transaktion abgeschlossen. Nachfolgende Datenbankoperationen starten automatisch eine neue Transaktion (im Auto-Commit-Modus) oder müssen manuell über ibase_trans() initiiert werden. Schlägt der Commit fehl, sollte die Transaktion mit fbird_rollback() zurückgerollt werden, um die Datenbank in einem konsistenten Zustand zu halten.

Hinweis: fbird_commit() ist ein Alias für ibase_commit(). Beide Funktionen sind funktional identisch. Die fbird_*-Variante wurde eingeführt, um den Bezug zur Firebird-Datenbank klarer zu kennzeichnen.

Parameter

Name Typ Default Beschreibung
$link_identifier resource null Eine Firebird/InterBase-Verbindungsressource oder Transaktionsressource, die mit ibase_connect(), ibase_pconnect() oder ibase_trans() erstellt wurde. Wird dieser Parameter weggelassen, wird die zuletzt verwendete Verbindung genutzt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Commit erfolgreich war. Im Fehlerfall wird false zurückgegeben. Fehlerdetails können über ibase_errmsg() oder ibase_errcode() abgefragt werden.

Beispiele

Einfache Transaktion committen

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

if (!$dbh) {
    die('Verbindung fehlgeschlagen: ' . ibase_errmsg());
}

// Datensatz einfügen
$result = ibase_query($dbh, "INSERT INTO EMPLOYEE (EMP_NO, FIRST_NAME, LAST_NAME) VALUES (200, 'Max', 'Mustermann')");

if ($result) {
    // Transaktion bestätigen
    if (fbird_commit($dbh)) {
        echo "Datensatz erfolgreich gespeichert.";
    } else {
        echo "Commit fehlgeschlagen: " . ibase_errmsg();
        ibase_rollback($dbh);
    }
} else {
    echo "Abfrage fehlgeschlagen: " . ibase_errmsg();
    ibase_rollback($dbh);
}

ibase_close($dbh);
Datensatz erfolgreich gespeichert.

Explizite Transaktion mit ibase_trans() und fbird_commit()

<?php
$dbh = ibase_connect('localhost:mydb', 'sysdba', 'masterkey');

if (!$dbh) {
    die('Verbindungsaufbau fehlgeschlagen.');
}

// Explizit eine neue Transaktion starten
$trans = ibase_trans(IBASE_WRITE | IBASE_COMMITTED, $dbh);

if (!$trans) {
    die('Transaktion konnte nicht gestartet werden: ' . ibase_errmsg());
}

try {
    ibase_query($trans, "UPDATE ORDERS SET STATUS = 'SHIPPED' WHERE ORDER_ID = 42");
    ibase_query($trans, "INSERT INTO ORDER_LOG (ORDER_ID, ACTION) VALUES (42, 'SHIPPED')");

    // Alle Änderungen bestätigen
    if (!fbird_commit($trans)) {
        throw new RuntimeException('Commit fehlgeschlagen: ' . ibase_errmsg());
    }

    echo "Transaktion erfolgreich abgeschlossen.";
} catch (RuntimeException $e) {
    ibase_rollback($trans);
    echo "Fehler: " . $e->getMessage();
}

ibase_close($dbh);
Transaktion erfolgreich abgeschlossen.

// Wichtig · Fallstricke

Deprecation: Die ibase_*- und fbird_*-Funktionen sind seit PHP 8.0 aus dem PHP-Kern entfernt worden und stehen nur noch über die PECL-Erweiterung ibase (bzw. FirebirdSQL/php-firebird) zur Verfügung. Für neue Projekte sollte die PDO-Erweiterung mit dem Firebird-Treiber (PDO_FIREBIRD) bevorzugt werden.

Transaktionskonsistenz: Vergessen Sie nie, bei einem Fehler fbird_rollback() aufzurufen, um Datenverlust oder inkonsistente Zustände zu vermeiden. Verwenden Sie idealerweise eine try-catch-Struktur, um sicherzustellen, dass Rollbacks auch bei unerwarteten Fehlern ausgeführt werden.

Alias: fbird_commit() ist vollständig identisch mit ibase_commit(). Beide Namen können synonym verwendet werden.