Signatur
Beschreibung
ocicommit() ist ein veralteter Alias der Funktion oci_commit() und sollte in neuem Code nicht mehr verwendet werden. Die Funktion beendet die aktuelle Transaktion auf einer Oracle-Datenbankverbindung und schreibt alle seit dem letzten Commit bzw. Rollback vorgenommenen Änderungen dauerhaft (permanent) in die Datenbank.
Oracle arbeitet standardmäßig im Auto-Commit-off-Modus, wenn die OCI8-Erweiterung verwendet wird. Das bedeutet, dass INSERT-, UPDATE- und DELETE-Anweisungen erst dann tatsächlich persistent gespeichert werden, wenn explizit ein Commit ausgeführt wird. Ohne einen Commit gehen alle Änderungen beim Schließen der Verbindung oder bei einem Fehler verloren.
Diese Funktion ist besonders wichtig in Anwendungen, die mehrere zusammengehörige Datenbankoperationen als eine atomare Einheit behandeln müssen (Transaktionssteuerung). Im Fehlerfall kann mit oci_rollback() die gesamte Transaktion rückgängig gemacht werden.
Achtung: ocicommit() ist seit PHP 8.0 als veraltet (deprecated) markiert und in PHP 8.0+ entfernt worden. Verwende stattdessen oci_commit().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine gültige Oracle-Verbindungsressource, die zuvor mit oci_connect(), oci_new_connect() oder oci_pconnect() erzeugt wurde. |
Rückgabewert
true bei Erfolg zurück, false im Fehlerfall (z. B. wenn die Verbindungsressource ungültig ist oder der Commit auf Datenbankseite fehlschlägt).Beispiele
Einfaches Commit nach einem INSERT
<?php
$conn = oci_connect('benutzer', 'passwort', 'meine_db');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, "INSERT INTO bestellungen (id, artikel) VALUES (42, 'Buch')");
oci_execute($stid, OCI_NO_AUTO_COMMIT); // Kein automatisches Commit
// Transaktion dauerhaft speichern (veralteter Alias)
if (ocicommit($conn)) {
echo "Transaktion erfolgreich gespeichert.";
} else {
$e = oci_error($conn);
echo "Fehler beim Commit: " . htmlentities($e['message']);
}
oci_free_statement($stid);
oci_close($conn);
?>
Transaktion mit Fehlerbehandlung und Rollback
<?php
$conn = oci_connect('benutzer', 'passwort', 'meine_db');
$stid1 = oci_parse($conn, "UPDATE konten SET saldo = saldo - 100 WHERE konto_id = 1");
$stid2 = oci_parse($conn, "UPDATE konten SET saldo = saldo + 100 WHERE konto_id = 2");
$ok1 = oci_execute($stid1, OCI_NO_AUTO_COMMIT);
$ok2 = oci_execute($stid2, OCI_NO_AUTO_COMMIT);
if ($ok1 && $ok2) {
// Veraltete Variante — besser: oci_commit($conn)
ocicommit($conn);
echo "Überweisung erfolgreich.";
} else {
oci_rollback($conn);
echo "Fehler — Transaktion zurückgerollt.";
}
oci_free_statement($stid1);
oci_free_statement($stid2);
oci_close($conn);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: ocicommit() ist ein veralteter Alias und wurde in PHP 8.0 entfernt. Verwende ausschließlich oci_commit() in aktuellem Code.
Wird oci_execute() ohne das Flag OCI_NO_AUTO_COMMIT aufgerufen, wird nach jeder Anweisung automatisch ein Commit durchgeführt und ocicommit() ist nicht mehr notwendig. Für echte Transaktionskontrolle immer OCI_NO_AUTO_COMMIT verwenden.
Beim Schließen einer Verbindung mit oci_close() werden ausstehende, nicht committete Änderungen automatisch zurückgerollt — ein explizites Commit ist daher zwingend erforderlich, wenn Änderungen persistiert werden sollen.