Signatur
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
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);
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);
// 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.