Start · Sprachen · PHP · Referenz · fbird_trans

fbird_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

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

Beschreibung

fbird_trans() öffnet eine neue Transaktion auf einer bestehenden Firebird- oder InterBase-Datenbankverbindung. Das zurückgegebene Transaktions-Handle kann anschließend an Funktionen wie fbird_query(), fbird_commit() und fbird_rollback() übergeben werden, um Datenbankoperationen explizit in einer Transaktion zu bündeln.

Mit dem Parameter trans_args lässt sich das Verhalten der Transaktion feinsteuern, etwa hinsichtlich Isolationslevel, Sperrmodus und Zugriffsmodus (Lesen/Schreiben). Die möglichen Werte sind vordefinierte Konstanten wie IBASE_READ, IBASE_WRITE, IBASE_COMMITTED, IBASE_CONSISTENCY oder IBASE_NOWAIT, die per bitweisem ODER kombiniert werden können.

Die Funktion ist besonders dann nützlich, wenn mehrere SQL-Anweisungen atomar ausgeführt werden sollen, d. h. entweder alle erfolgreich abgeschlossen oder alle rückgängig gemacht werden müssen. Sie bietet gegenüber der impliziten Transaktionsverwaltung von PHP/Firebird mehr Kontrolle.

Hinweis: fbird_trans() ist ein Alias für ibase_trans(). Die Firebird-Erweiterung (ext/ibase) wurde in PHP 7.4 aus dem PHP-Core entfernt und ist seitdem als eigenständiges PECL-Paket (php-firebird bzw. ibase) verfügbar.

Parameter

Name Typ Default Beschreibung
$trans_args int IBASE_DEFAULT Bitmaske aus Transaktionskonstanten, die das Verhalten der Transaktion steuern. Mögliche Werte sind z. B. IBASE_READ (nur lesen), IBASE_WRITE (lesen & schreiben), IBASE_COMMITTED, IBASE_CONSISTENCY, IBASE_NOWAIT. Mehrere Werte können mit | kombiniert werden.
$link_identifier resource Eine bestehende Firebird/InterBase-Datenbankverbindung, wie sie von fbird_connect() oder fbird_pconnect() zurückgegeben wird. Wird kein Handle angegeben, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg ein Transaktions-Handle (Resource) zurück, das an weitere Datenbankfunktionen übergeben werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Einfache Transaktion mit Commit und Rollback

<?php
$dbh = fbird_connect('localhost:/var/lib/firebird/example.fdb', 'SYSDBA', 'masterkey');

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

if (!$trans) {
    die('Transaktion konnte nicht gestartet werden: ' . fbird_errmsg());
}

$result = fbird_query($trans, "INSERT INTO kunden (name, email) VALUES ('Max Mustermann', 'max@example.com')");

if ($result) {
    fbird_commit($trans);
    echo "Datensatz erfolgreich eingefügt und committed.";
} else {
    fbird_rollback($trans);
    echo "Fehler beim Einfügen – Transaktion zurückgerollt.";
}

fbird_close($dbh);
Datensatz erfolgreich eingefügt und committed.

Mehrere Statements atomar ausführen

<?php
$dbh = fbird_connect('localhost:/var/lib/firebird/example.fdb', 'SYSDBA', 'masterkey');

$trans = fbird_trans(IBASE_WRITE | IBASE_NOWAIT, $dbh);

try {
    $r1 = fbird_query($trans, "UPDATE konten SET saldo = saldo - 500 WHERE id = 1");
    $r2 = fbird_query($trans, "UPDATE konten SET saldo = saldo + 500 WHERE id = 2");

    if (!$r1 || !$r2) {
        throw new RuntimeException('SQL-Fehler: ' . fbird_errmsg());
    }

    fbird_commit($trans);
    echo "Überweisung erfolgreich abgeschlossen.";
} catch (RuntimeException $e) {
    fbird_rollback($trans);
    echo "Fehler: " . $e->getMessage() . " – Transaktion zurückgerollt.";
}

fbird_close($dbh);
Überweisung erfolgreich abgeschlossen.

// Wichtig · Fallstricke

Deprecation / Entfernung: Die ibase_*/fbird_*-Erweiterung wurde in PHP 7.4 aus dem offiziellen PHP-Core entfernt. Für PHP 7.4+ muss das PECL-Paket ibase oder der Community-Fork php-firebird separat installiert werden.

Transaktionskonstanten kombinieren: Die Konstanten IBASE_READ und IBASE_WRITE schließen sich gegenseitig aus und sollten nicht zusammen verwendet werden. Gleiches gilt für IBASE_COMMITTED, IBASE_CONSISTENCY und IBASE_REPEATABLE_READ als Isolationslevel.

Ressourcen-Lecks vermeiden: Jede mit fbird_trans() gestartete Transaktion sollte explizit mit fbird_commit() oder fbird_rollback() abgeschlossen werden, da sonst Ressourcen auf dem Datenbankserver blockiert bleiben können.