Signatur
Beschreibung
fbird_rollback_ret() führt einen Rollback auf der angegebenen Transaktion durch und macht dabei alle innerhalb dieser Transaktion vorgenommenen Änderungen rückgängig. Im Gegensatz zu fbird_rollback() wird die Transaktion nach dem Rollback nicht geschlossen, sondern bleibt weiterhin aktiv und kann sofort weiter verwendet werden.
Dies ist nützlich, wenn ein Fehler innerhalb einer Transaktion behandelt werden soll, ohne den gesamten Transaktionskontext zu verlieren. Nach dem Rollback kann die Transaktion neu gestartet werden, ohne eine neue Transaktion explizit eröffnen zu müssen.
Wird kein link_identifier übergeben, verwendet PHP die zuletzt geöffnete Datenbankverbindung und die dazu gehörende Standardtransaktion. Die Funktion gehört zur ibase/fbird-Erweiterung für Firebird- und InterBase-Datenbanken.
Hinweis: Diese Funktion ist ein Alias bzw. äquivalent zu ibase_rollback_ret(). Die fbird_-Variante wurde im Zuge der Umbenennung der Extension eingeführt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier | resource | null | Eine Transaktions-Ressource, wie sie von fbird_trans() zurückgegeben wird. Wird dieser Parameter weggelassen, wird die Standardtransaktion der zuletzt geöffneten Verbindung verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
Rollback mit offener Transaktion und erneutem Einfügen
<?php
$dbh = fbird_connect('localhost:employees', 'sysdba', 'masterkey');
$trans = fbird_trans($dbh);
// Ersten INSERT – wird zurückgerollt
fbird_query($trans, "INSERT INTO employees (name, salary) VALUES ('Müller', 3500)");
// Rollback, Transaktion bleibt jedoch offen
$trans = fbird_rollback_ret($trans);
if ($trans === false) {
die('Rollback fehlgeschlagen: ' . fbird_errmsg());
}
// Transaktion ist weiterhin aktiv – neuer Versuch
fbird_query($trans, "INSERT INTO employees (name, salary) VALUES ('Schmidt', 4000)");
fbird_commit($trans);
echo 'Datensatz erfolgreich eingefügt.';
fbird_close($dbh);
?>
Fehlerbehandlung mit bedingtem Rollback und Wiederverwendung
<?php
$dbh = fbird_connect('localhost:inventory', 'sysdba', 'masterkey');
$trans = fbird_trans($dbh);
try {
$result = fbird_query($trans, "UPDATE stock SET quantity = quantity - 10 WHERE product_id = 99");
if (!$result) {
throw new RuntimeException('UPDATE fehlgeschlagen: ' . fbird_errmsg());
}
fbird_commit($trans);
echo 'Bestand aktualisiert.';
} catch (RuntimeException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
// Rollback, Transaktion bleibt offen für Logging-Zwecke
$trans = fbird_rollback_ret($trans);
// Fehler in Log-Tabelle schreiben (gleiche Transaktion)
if ($trans !== false) {
fbird_query($trans, "INSERT INTO error_log (message, logged_at) VALUES ('" . addslashes($e->getMessage()) . "', CURRENT_TIMESTAMP)");
fbird_commit($trans);
}
}
fbird_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die fbird_-Funktionen sowie die gesamte ibase/fbird-Erweiterung sind seit PHP 8.0 aus dem PHP-Kern entfernt worden und werden nur noch als PECL-Erweiterung (php-firebird) gepflegt. Für neue Projekte sollte geprüft werden, ob eine aktuelle PECL-Version verfügbar ist.
Beim Einsatz von fbird_rollback_ret() muss beachtet werden, dass die zurückgegebene Ressource der erneuerten Transaktion für weitere Operationen verwendet werden sollte, da sich der interne Zustand ändern kann. Das Ignorieren des Rückgabewerts kann zu unerwartetem Verhalten führen.
Werden Benutzerdaten in SQL-Abfragen verwendet, sollte stets fbird_execute() mit vorbereiteten Statements genutzt werden, um SQL-Injection-Angriffe zu vermeiden.