Start · Sprachen · PHP · Referenz · ibase_rollback

ibase_rollback

Funktion

Macht eine offene Firebird/InterBase-Transaktion rückgängig und verwirft alle vorgenommenen Änderungen.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_rollback(?resource $link_identifier = null): bool

Beschreibung

ibase_rollback() bricht eine laufende Transaktion auf einer Firebird- oder InterBase-Datenbankverbindung ab und macht alle seit dem letzten ibase_trans()- bzw. ibase_query()-Aufruf vorgenommenen Datenänderungen rückgängig. Die Funktion ist das Gegenstück zu ibase_commit() und wird immer dann verwendet, wenn ein Fehler aufgetreten ist oder Änderungen bewusst verworfen werden sollen.

Wird kein $link_identifier übergeben, wirkt sich der Rollback auf die zuletzt geöffnete Transaktion der Standard-Datenbankverbindung aus. Wurde eine Verbindung explizit per ibase_connect() oder ibase_pconnect() geöffnet, kann diese als Argument übergeben werden.

Transaktionen in Firebird/InterBase folgen dem ACID-Prinzip. Mit einem Rollback werden alle DML-Operationen (INSERT, UPDATE, DELETE) der betroffenen Transaktion atomar rückgängig gemacht, sodass die Datenbank in einem konsistenten Zustand verbleibt. Nach einem erfolgreichen Rollback ist die Transaktion beendet; für weitere Datenbankoperationen muss bei Bedarf eine neue Transaktion gestartet werden.

Hinweis: Die ibase_*-Erweiterung (auch bekannt als interbase) ist seit PHP 7.4 aus dem PHP-Kern entfernt und wird als separates PECL-Paket (ibase) gepflegt. Für neue Projekte empfiehlt sich die Verwendung der modernen Firebird/InterBase-PDO-Unterstützung.

Parameter

Name Typ Default Beschreibung
$link_identifier resource|null null Eine Transaktions- oder Verbindungsressource, die mit ibase_trans(), ibase_connect() oder ibase_pconnect() erzeugt wurde. Wird null übergeben oder das Argument weggelassen, wird die zuletzt verwendete Verbindung bzw. Transaktion genutzt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Rollback erfolgreich durchgeführt wurde, andernfalls false. Im Fehlerfall kann ibase_errmsg() für eine detaillierte Fehlermeldung genutzt werden.

Beispiele

Einfacher Rollback bei einem Fehler

<?php
$dbh = ibase_connect('localhost:path/to/database.fdb', 'SYSDBA', 'masterkey');

$trans = ibase_trans(IBASE_WRITE, $dbh);

$result = ibase_query($trans, "INSERT INTO orders (product_id, quantity) VALUES (42, 5)");

if (!$result) {
    // Fehler aufgetreten – Transaktion rückgängig machen
    ibase_rollback($trans);
    echo 'Transaktion wurde zurückgerollt: ' . ibase_errmsg();
} else {
    ibase_commit($trans);
    echo 'Transaktion erfolgreich abgeschlossen.';
}

ibase_close($dbh);
Transaktion erfolgreich abgeschlossen.

Rollback bei mehreren Abfragen innerhalb einer Transaktion

<?php
$dbh = ibase_connect('localhost:path/to/database.fdb', 'SYSDBA', 'masterkey');
$trans = ibase_trans(IBASE_WRITE, $dbh);

try {
    $r1 = ibase_query($trans, "UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    if (!$r1) throw new RuntimeException(ibase_errmsg());

    $r2 = ibase_query($trans, "UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    if (!$r2) throw new RuntimeException(ibase_errmsg());

    ibase_commit($trans);
    echo 'Überweisung erfolgreich.';
} catch (RuntimeException $e) {
    ibase_rollback($trans);
    echo 'Fehler – Rollback durchgeführt: ' . $e->getMessage();
}

ibase_close($dbh);
Überweisung erfolgreich.

// Wichtig · Fallstricke

Deprecation / Entfernung: Die ibase_*-Funktionen wurden in PHP 7.4 als veraltet markiert und in PHP 8.0 aus dem offiziellen PHP-Core entfernt. Sie stehen nur noch über die PECL-Erweiterung php-interbase zur Verfügung. Für neue Projekte sollte PDO mit dem Firebird-Treiber (PDO_FIREBIRD) eingesetzt werden.

Ein Rollback sollte stets in einem catch-Block oder einem Fehlerbehandlungs-Zweig aufgerufen werden, um sicherzustellen, dass inkonsistente Daten nicht in der Datenbank verbleiben. Vergessene Transaktionen können zu Sperren (Locks) auf Tabellenzeilen führen und andere Verbindungen blockieren.

Nach einem Rollback ist die Transaktionsressource ungültig. Jeder weitere Versuch, dieselbe Ressource für Abfragen zu verwenden, schlägt fehl. Eine neue Transaktion muss mit ibase_trans() gestartet werden.