Start · Sprachen · PHP · Referenz · fbird_commit_ret

fbird_commit_ret

Funktion

Bestätigt (committet) eine Firebird/InterBase-Transaktion und hält die Transaktion für weitere Operationen geöffnet.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_commit_ret(resource $link_identifier = null): resource|false

Beschreibung

fbird_commit_ret() ist eine Funktion der Firebird/InterBase-Datenbankschnittstelle. Sie schreibt alle seit dem letzten Commit ausstehenden Änderungen einer Transaktion dauerhaft in die Datenbank und behält dabei die Transaktion offen, sodass weitere SQL-Operationen innerhalb derselben Transaktion ausgeführt werden können.

Dies unterscheidet sich von fbird_commit(), das die Transaktion nach dem Commit schließt. fbird_commit_ret() ist nützlich, wenn man eine laufende Transaktion zwischenspeichern möchte, ohne sie zu beenden – beispielsweise um nach einem Zwischenstand weiter Daten einzufügen oder zu modifizieren, ohne eine neue Transaktion explizit starten zu müssen.

Wird kein link_identifier übergeben, wird die zuletzt geöffnete Verbindung bzw. die Standard-Transaktion verwendet. Der zurückgegebene Ressource-Handle kann für nachfolgende Datenbankoperationen genutzt werden.

Hinweis: Die Funktion ist ein Alias bzw. Teil der ibase_*-Funktionsfamilie. In PHP 8.0 wurde das InterBase-Extension aus dem PHP-Kern entfernt; die Funktion ist seitdem nur über die PECL-Extension ibase oder über Firebird-eigene Extensions verfügbar.

Parameter

Name Typ Default Beschreibung
$link_identifier resource null Eine optionale Transaktions-Ressource, die zuvor mit fbird_trans() oder implizit erstellt wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Transaktion der Standard-Datenbankverbindung verwendet.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine Transaktions-Ressource zurück, die für weitere Operationen genutzt werden kann, wenn der Commit erfolgreich war. Bei einem Fehler wird false zurückgegeben.

Beispiele

Zwischencommit ohne Schließen der Transaktion

<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = fbird_connect('localhost:/path/to/database.fdb', 'SYSDBA', 'masterkey');

// Transaktion starten
$trans = fbird_trans($dbh);

// Ersten Datensatz einfügen
fbird_query($trans, "INSERT INTO orders (id, product, quantity) VALUES (1, 'Widget', 10)");

// Zwischencommit: Änderungen speichern, Transaktion bleibt offen
$trans = fbird_commit_ret($trans);

if ($trans === false) {
    die('Commit fehlgeschlagen: ' . fbird_errmsg());
}

// Weitere Operationen in derselben (weiter offenen) Transaktion
fbird_query($trans, "INSERT INTO orders (id, product, quantity) VALUES (2, 'Gadget', 5)");

// Transaktion endgültig abschließen
fbird_commit($trans);

fbird_close($dbh);
?>

Verwendung mit Standard-Verbindung (ohne expliziten Transaktions-Handle)

<?php
// Verbindung herstellen (wird intern als Standard-Verbindung gespeichert)
$dbh = fbird_connect('localhost:/path/to/database.fdb', 'SYSDBA', 'masterkey');

// Operation auf der Standard-Transaktion
fbird_query("UPDATE products SET stock = stock - 1 WHERE id = 42");

// Commit der Standard-Transaktion, aber offen halten
$trans = fbird_commit_ret();

if ($trans === false) {
    echo 'Fehler beim Commit: ' . fbird_errmsg();
} else {
    echo 'Zwischencommit erfolgreich, Transaktion bleibt offen.';
    // Weitere Arbeit in derselben Transaktion möglich
    fbird_query($trans, "INSERT INTO audit_log (action) VALUES ('stock_reduced')");
    fbird_commit($trans);
}

fbird_close($dbh);
?>
Zwischencommit erfolgreich, Transaktion bleibt offen.

// Wichtig · Fallstricke

Deprecation / Entfernung: Die fbird_*-Funktionen sind Aliase der ibase_*-Funktionen. Ab PHP 8.0 wurde die InterBase-Extension aus dem PHP-Kern entfernt. Für aktuelle Projekte sollte die PECL-Extension ibase oder eine alternative Datenbankabstraktion (z. B. PDO mit entsprechendem Treiber) verwendet werden.

Fehlerbehandlung: Bei einem fehlgeschlagenen Commit gibt die Funktion false zurück. Fehlerdetails können mit fbird_errmsg() abgerufen werden. Es empfiehlt sich, den Rückgabewert stets zu prüfen, um halbfertige Datenbankzustände zu vermeiden.

Transaktionskonsistenz: Da die Transaktion nach dem Commit offen bleibt, sind die bereits geschriebenen Daten für andere Transaktionen sofort sichtbar (je nach Isolationslevel). Dies sollte beim Design von Anwendungslogik berücksichtigt werden.