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