Signatur
Beschreibung
ocirollback() ist ein veralteter Alias der Funktion oci_rollback() und macht alle nicht festgeschriebenen Änderungen einer Oracle-Datenbanktransaktion rückgängig. Die Funktion gehört zur OCI8-Erweiterung (Oracle Call Interface) und wird verwendet, wenn eine Transaktion aufgrund eines Fehlers oder einer Geschäftslogik-Entscheidung abgebrochen werden soll.
Nach dem Aufruf wird die aktuelle Transaktion beendet und alle seit dem letzten oci_commit()- oder ocicommit()-Aufruf vorgenommenen INSERT-, UPDATE- und DELETE-Operationen werden verworfen. Die Datenbankverbindung selbst bleibt dabei bestehen.
Diese Funktion ist veraltet (deprecated) und sollte in neuem Code nicht mehr verwendet werden. Stattdessen sollte direkt oci_rollback() eingesetzt werden. Der Alias-Name stammt aus der älteren OCI-API (PHP 4) und wurde in moderneren PHP-Versionen beibehalten, um Rückwärtskompatibilität zu gewährleisten.
Typischerweise wird ocirollback() zusammen mit oci_execute() im Modus OCI_NO_AUTO_COMMIT verwendet, um Transaktionen manuell zu steuern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine gültige Oracle-Verbindungsressource, die mit oci_connect(), oci_pconnect() oder oci_new_connect() erzeugt wurde. |
Rückgabewert
true bei Erfolg zurück, oder false bei einem Fehler (z. B. ungültige Verbindungsressource oder Datenbankfehler beim Rollback).Beispiele
Transaktion bei Fehler zurückrollen
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, "UPDATE konten SET saldo = saldo - 100 WHERE konto_id = :id");
oci_bind_by_name($stid, ':id', $konto_id);
$konto_id = 42;
// Anweisung ohne Auto-Commit ausführen
$result = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$result) {
// Fehler aufgetreten – Transaktion zurückrollen
ocirollback($conn); // Veralteter Alias – besser: oci_rollback()
echo "Transaktion wurde zurückgerollt.";
} else {
oci_commit($conn);
echo "Transaktion erfolgreich gespeichert.";
}
oci_free_statement($stid);
oci_close($conn);
Mehrere Operationen als atomare Transaktion
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
$fehler = false;
$stmt1 = oci_parse($conn, "INSERT INTO bestellungen (id, artikel) VALUES (1, 'Buch')");
$stmt2 = oci_parse($conn, "UPDATE lager SET menge = menge - 1 WHERE artikel = 'Buch'");
if (!oci_execute($stmt1, OCI_NO_AUTO_COMMIT)) {
$fehler = true;
}
if (!oci_execute($stmt2, OCI_NO_AUTO_COMMIT)) {
$fehler = true;
}
if ($fehler) {
// Alle Änderungen verwerfen
ocirollback($conn); // Deprecated – bevorzugt: oci_rollback()
echo "Fehler: Alle Änderungen wurden zurückgerollt.";
} else {
oci_commit($conn);
echo "Bestellung und Lageranpassung erfolgreich gespeichert.";
}
oci_free_statement($stmt1);
oci_free_statement($stmt2);
oci_close($conn);
// Wichtig · Fallstricke
Veraltet: ocirollback() ist ein Alias aus der alten PHP-4-OCI-API und sollte in neuem Code nicht verwendet werden. Verwende stattdessen oci_rollback(). In zukünftigen PHP-Versionen könnten veraltete Aliase entfernt werden.
Auto-Commit: Standardmäßig führt oci_execute() einen automatischen Commit durch. Um Transaktionen manuell zu steuern (und ocirollback() sinnvoll nutzen zu können), muss oci_execute() mit dem Flag OCI_NO_AUTO_COMMIT aufgerufen werden.
Ressourcenverwaltung: Ein Rollback betrifft alle offenen, nicht committeten Operationen auf der Verbindung, nicht nur die zuletzt ausgeführte Anweisung.