Signatur
Beschreibung
fbird_rollback() bricht eine laufende Transaktion auf einer Firebird- oder InterBase-Datenbankverbindung ab und stellt den Datenbankzustand vor Beginn der Transaktion wieder her. Alle seit dem letzten ibase_commit() bzw. fbird_commit() vorgenommenen Datenänderungen (INSERT, UPDATE, DELETE) werden verworfen.
Die Funktion wird typischerweise im Fehlerfall eingesetzt, um eine konsistente Datenbank zu gewährleisten – etwa wenn ein mehrstufiger Schreibvorgang fehlschlägt und kein Teilzustand gespeichert werden darf. Sie ist das Gegenstück zu fbird_commit().
Wird kein $link_identifier übergeben, verwendet PHP automatisch die zuletzt geöffnete Datenbankverbindung. Nach einem erfolgreichen Rollback bleibt die Verbindung bestehen und eine neue Transaktion kann begonnen werden.
Hinweis: fbird_rollback() ist ein Alias für ibase_rollback(). Beide Funktionen sind in PHP 8.4 in der Erweiterung ibase / fbird enthalten, wobei die fbird_*-Variante die modernere Benennung darstellt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier | resource|null | null | Eine optionale Verbindungsressource, die von fbird_connect() oder fbird_pconnect() zurückgegeben wurde. Wird null übergeben oder weggelassen, wird die zuletzt geöffnete Verbindung verwendet. Alternativ kann auch eine Transaktionsressource übergeben werden, die von fbird_trans() erzeugt wurde. |
Rückgabewert
true zurück, wenn der Rollback erfolgreich durchgeführt wurde. Im Fehlerfall (z. B. keine aktive Transaktion oder ungültige Verbindungsressource) wird false zurückgegeben.Beispiele
Rollback bei fehlgeschlagenem Schreibvorgang
<?php
$dbh = fbird_connect('localhost:db/3050', 'sysdba', 'masterkey', 'UTF-8');
try {
// Erste Einfügeoperation
$result1 = fbird_query($dbh, "INSERT INTO orders (id, product) VALUES (1, 'Widget')");
if (!$result1) {
throw new RuntimeException('Fehler beim ersten INSERT: ' . fbird_errmsg());
}
// Zweite Einfügeoperation (absichtlich fehlerhaft)
$result2 = fbird_query($dbh, "INSERT INTO order_items (order_id, qty) VALUES (999, 'ungültig')");
if (!$result2) {
throw new RuntimeException('Fehler beim zweiten INSERT: ' . fbird_errmsg());
}
// Alles erfolgreich: Commit
fbird_commit($dbh);
echo "Transaktion erfolgreich gespeichert.";
} catch (RuntimeException $e) {
// Rollback bei Fehler
fbird_rollback($dbh);
echo "Transaktion zurückgesetzt: " . $e->getMessage();
}
fbird_close($dbh);
Rollback einer expliziten Transaktion
<?php
$dbh = fbird_connect('localhost:db/3050', 'sysdba', 'masterkey');
// Explizite Transaktion mit bestimmten Flags starten
$trans = fbird_trans(IBASE_WRITE | IBASE_COMMITTED, $dbh);
// Datensatz in der Transaktion aktualisieren
fbird_query($trans, "UPDATE accounts SET balance = balance - 100 WHERE id = 42");
$ok = false; // Simuliertes Fehlerszenario
if ($ok) {
fbird_commit($trans);
echo "Buchung gespeichert.";
} else {
fbird_rollback($trans);
echo "Buchung verworfen – Kontostand unverändert.";
}
fbird_close($dbh);
// Wichtig · Fallstricke
Alias: fbird_rollback() ist ein Alias für ibase_rollback(). In älteren Projekten ist oft nur ibase_rollback() zu finden; beide Funktionen verhalten sich identisch.
Autocommit: Firebird/InterBase arbeitet standardmäßig nicht im Autocommit-Modus. Wird weder fbird_commit() noch fbird_rollback() aufgerufen, werden Änderungen beim Schließen der Verbindung automatisch zurückgerollt. Dies kann zu unerwartetem Datenverlust führen, wenn Commits vergessen werden.
Verfügbarkeit: Die ibase/fbird-Erweiterung muss beim Kompilieren aktiviert worden sein (--with-interbase). Ab PHP 7.4 wurde sie aus dem PHP-Kern ausgelagert und muss separat installiert werden (PECL-Paket ibase oder firebird).