Start · Sprachen · PHP · Referenz · ibase_commit

ibase_commit

Funktion

Schreibt eine aktive InterBase/Firebird-Transaktion fest (Commit) und macht alle Änderungen dauerhaft.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_commit(resource $link_or_trans_identifier = null): bool

Beschreibung

ibase_commit() beendet eine laufende Datenbanktransaktion für eine InterBase- oder Firebird-Verbindung, indem alle seit dem letzten Commit bzw. Rollback vorgenommenen Änderungen (INSERT, UPDATE, DELETE) dauerhaft in die Datenbank geschrieben werden.

Die Funktion akzeptiert entweder eine Transaktions-Ressource (erzeugt z. B. durch ibase_trans()) oder eine Verbindungsressource. Wird kein Parameter übergeben, wird die zuletzt geöffnete Verbindung und deren Standard-Transaktion verwendet.

Nach einem erfolgreichen Commit ist die Transaktion abgeschlossen. Sollen weitere Operationen in einer neuen Transaktion durchgeführt werden, muss diese explizit mit ibase_trans() gestartet oder implizit durch die nächste DML-Operation begonnen werden.

Im Gegensatz zu ibase_commit_ret() bleibt die Transaktion nach einem gewöhnlichen ibase_commit() nicht offen – sie wird vollständig geschlossen.

Parameter

Name Typ Default Beschreibung
$link_or_trans_identifier resource null Eine Transaktions-Ressource (von ibase_trans()) oder eine Verbindungsressource (von ibase_connect() bzw. ibase_pconnect()). Wird kein Parameter übergeben, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Transaktion erfolgreich festgeschrieben wurde. Bei einem Fehler (z. B. ungültige Ressource oder Datenbankfehler) wird false zurückgegeben.

Beispiele

Einfacher Commit nach einem INSERT

<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'geheimespasswort');

$sql = "INSERT INTO kunden (name, email) VALUES ('Max Mustermann', 'max@example.com')";
ibase_query($dbh, $sql);

// Transaktion festschreiben
if (ibase_commit($dbh)) {
    echo 'Datensatz erfolgreich gespeichert.';
} else {
    echo 'Fehler beim Commit: ' . ibase_errmsg();
}

ibase_close($dbh);
Datensatz erfolgreich gespeichert.

Explizite Transaktion mit ibase_trans() und Fehlerbehandlung

<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'geheimespasswort');

// Explizite Transaktion starten
$trans = ibase_trans(IBASE_WRITE | IBASE_COMMITTED, $dbh);

try {
    ibase_query($trans, "UPDATE konten SET betrag = betrag - 100 WHERE id = 1");
    ibase_query($trans, "UPDATE konten SET betrag = betrag + 100 WHERE id = 2");

    // Beide Operationen gemeinsam festschreiben
    if (!ibase_commit($trans)) {
        throw new RuntimeException('Commit fehlgeschlagen: ' . ibase_errmsg());
    }
    echo 'Überweisung erfolgreich durchgeführt.';
} catch (RuntimeException $e) {
    ibase_rollback($trans);
    echo 'Fehler: ' . $e->getMessage();
}

ibase_close($dbh);
Überweisung erfolgreich durchgeführt.

// Wichtig · Fallstricke

Deprecation-Hinweis: Die gesamte ibase_*-Erweiterung wurde mit PHP 7.4 als veraltet markiert und mit PHP 8.0 aus dem PHP-Kern entfernt. Für neue Projekte mit Firebird-Datenbanken sollte stattdessen die PECL-Erweiterung ibase oder die Firebird PDO-Erweiterung (PDO_Firebird) verwendet werden.

Wird ibase_commit() mit einer bereits abgeschlossenen oder ungültigen Transaktionsressource aufgerufen, gibt die Funktion false zurück und erzeugt einen PHP-Fehler. Es empfiehlt sich daher, den Rückgabewert stets zu prüfen und im Fehlerfall ibase_rollback() aufzurufen, um einen konsistenten Datenbankzustand sicherzustellen.