Start · Sprachen · PHP · Referenz · ibase_trans

ibase_trans

Funktion

Startet eine neue Transaktion auf einer Firebird/InterBase-Datenbankverbindung und gibt ein Transaktions-Handle zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_trans(int $trans_args = IBASE_DEFAULT, resource $link_identifier = null): resource|false

Beschreibung

ibase_trans() eröffnet eine neue Transaktion auf einer bestehenden Firebird- oder InterBase-Datenbankverbindung. Im Gegensatz zur automatischen Transaktion, die bei vielen Datenbankoperationen implizit genutzt wird, erlaubt diese Funktion die explizite Kontrolle über Transaktionseigenschaften wie Isolationslevel, Sperrstrategie und Zugriffsrechte.

Der erste Parameter trans_args akzeptiert eine Kombination von Konstanten (z. B. IBASE_READ, IBASE_WRITE, IBASE_COMMITTED, IBASE_CONSISTENCY), die mit dem bitweisen OR-Operator verknüpft werden können. Damit lässt sich das Verhalten der Transaktion sehr granular steuern.

Das zurückgegebene Transaktions-Handle kann anschließend an Funktionen wie ibase_query(), ibase_commit() oder ibase_rollback() übergeben werden, um Datenbankoperationen explizit innerhalb dieser Transaktion auszuführen. Mehrere Transaktionen auf derselben Verbindung sind gleichzeitig möglich.

Hinweis: Die gesamte ibase_*-Erweiterung (Interbase/Firebird) gilt seit PHP 7.4 als veraltet und wurde in PHP 8.0 aus dem PHP-Core entfernt. Für neue Projekte sollte stattdessen die ibase-PECL-Erweiterung oder eine alternative Datenbank-API genutzt werden.

Parameter

Name Typ Default Beschreibung
$trans_args int IBASE_DEFAULT Kombinierbare Flags, die das Verhalten der Transaktion bestimmen. Mögliche Werte sind u. a. IBASE_READ (nur lesend), IBASE_WRITE (lesend und schreibend), IBASE_COMMITTED, IBASE_CONSISTENCY, IBASE_CONCURRENCY, IBASE_REC_VERSION, IBASE_REC_NO_VERSION, IBASE_WAIT und IBASE_NOWAIT. Mehrere Flags werden mit | verknüpft.
$link_identifier resource Eine gültige Firebird/InterBase-Verbindungsressource, die zuvor mit ibase_connect() oder ibase_pconnect() geöffnet wurde. Wird kein Handle übergeben, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt im Erfolgsfall eine Transaktionsressource zurück, die als Handle für nachfolgende Datenbankoperationen und Transaktionsbefehle verwendet werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Einfache Transaktion starten, Daten schreiben und bestätigen

<?php
$dbh = ibase_connect('localhost:employee', 'sysdba', 'masterkey');

// Neue Transaktion mit Schreibzugriff starten
$trans = ibase_trans(IBASE_WRITE | IBASE_COMMITTED, $dbh);

if ($trans === false) {
    die('Transaktion konnte nicht gestartet werden.');
}

// Abfrage innerhalb der Transaktion ausführen
$result = ibase_query($trans, "INSERT INTO ORDERS (ORDER_ID, CUSTOMER) VALUES (42, 'Mustermann')");

if ($result) {
    ibase_commit($trans);
    echo 'Transaktion erfolgreich bestätigt.';
} else {
    ibase_rollback($trans);
    echo 'Fehler – Transaktion zurückgerollt.';
}

ibase_close($dbh);
?>
Transaktion erfolgreich bestätigt.

Read-Only-Transaktion mit Consistency-Isolationslevel

<?php
$dbh = ibase_connect('localhost:employee', 'sysdba', 'masterkey');

// Schreibgeschützte Transaktion mit Konsistenz-Isolationslevel
$trans = ibase_trans(IBASE_READ | IBASE_CONSISTENCY, $dbh);

if ($trans === false) {
    die('Transaktion konnte nicht gestartet werden.');
}

$result = ibase_query($trans, 'SELECT * FROM EMPLOYEE');

while ($row = ibase_fetch_assoc($result)) {
    echo $row['FIRST_NAME'] . ' ' . $row['LAST_NAME'] . PHP_EOL;
}

// Read-Only-Transaktion beenden (commit ohne Änderungen)
ibase_commit($trans);
ibase_close($dbh);
?>

// Wichtig · Fallstricke

Deprecation-Hinweis: Die ibase_*-Funktionen wurden in PHP 7.4 als veraltet markiert (deprecated) und in PHP 8.0 vollständig aus dem PHP-Kern entfernt. Für PHP 8.x steht die Funktionalität nur noch über die PECL-Erweiterung ibase zur Verfügung.

Wird eine Transaktion weder mit ibase_commit() bestätigt noch mit ibase_rollback() zurückgerollt, bevor das Skript endet, führt PHP automatisch ein Rollback durch. Offene Transaktionen sollten daher immer explizit abgeschlossen werden, um Datenkonsistenz und Datenbankperformance sicherzustellen.

Das gleichzeitige Öffnen mehrerer Transaktionen auf derselben Verbindung ist möglich. Dabei ist Vorsicht geboten: Jede Transaktion hält eigene Sperren, was bei unachtsamem Umgang zu Deadlocks führen kann.