Start · Sprachen · PHP · Referenz · ocirollback

ocirollback

Funktion

Veralteter Alias von <code>oci_rollback()</code> – setzt eine ausstehende Oracle-Datenbanktransaktion zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ocirollback(resource $connection): bool

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

Typ
bool
Beschreibung
Gibt 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);
Transaktion erfolgreich gespeichert.

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);
Bestellung und Lageranpassung erfolgreich gespeichert.

// 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.