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