Signatur
Beschreibung
cubrid_rollback() macht alle Datenbankänderungen rückgängig, die seit dem letzten cubrid_commit() oder dem Beginn der Verbindung im Auto-Commit-deaktivierten Modus vorgenommen wurden. Die Funktion ist das Gegenstück zu cubrid_commit() und ermöglicht eine sichere Fehlerbehandlung innerhalb von Transaktionen.
CUBRID-Verbindungen arbeiten standardmäßig im Auto-Commit-Modus. Um Transaktionen manuell steuern zu können, muss der Auto-Commit-Modus zunächst mit cubrid_set_autocommit($conn, CUBRID_AUTOCOMMIT_FALSE) deaktiviert werden. Erst dann haben cubrid_commit() und cubrid_rollback() eine Wirkung.
Ein typischer Einsatz ist das Zurücksetzen einer Transaktion, wenn während einer Abfolge von SQL-Operationen ein Fehler auftritt, um die Datenintegrität sicherzustellen. So wird vermieden, dass nur ein Teil der zusammengehörigen Änderungen in die Datenbank übernommen wird.
Nach einem erfolgreichen Rollback beginnt implizit eine neue Transaktion. Alle nachfolgenden SQL-Operationen gehören dieser neuen Transaktion an, bis erneut cubrid_commit() oder cubrid_rollback() aufgerufen wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $conn_identifier Pflicht | resource | Die CUBRID-Verbindungsressource, die von cubrid_connect() oder cubrid_connect_with_url() zurückgegeben wurde. |
Rückgabewert
true zurück, wenn der Rollback erfolgreich war, andernfalls false. Bei einem ungültigen Verbindungs-Handle oder einem internen Datenbankfehler wird false zurückgegeben.Beispiele
Transaktion mit Rollback bei Fehler
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
// Auto-Commit deaktivieren
cubrid_set_autocommit($conn, CUBRID_AUTOCOMMIT_FALSE);
try {
$result1 = cubrid_execute($conn, "INSERT INTO orders (product_id, quantity) VALUES (1, 10)");
if (!$result1) {
throw new RuntimeException('Fehler beim Einfügen der Bestellung.');
}
$result2 = cubrid_execute($conn, "UPDATE inventory SET stock = stock - 10 WHERE product_id = 1");
if (!$result2) {
throw new RuntimeException('Fehler beim Aktualisieren des Lagerbestands.');
}
// Beide Operationen erfolgreich: Transaktion festschreiben
cubrid_commit($conn);
echo "Transaktion erfolgreich abgeschlossen.\n";
} catch (RuntimeException $e) {
// Bei Fehler: alle Änderungen rückgängig machen
cubrid_rollback($conn);
echo "Fehler: " . $e->getMessage() . "\nTransaktion zurückgesetzt.\n";
} finally {
cubrid_disconnect($conn);
}
?>
Manuelles Rollback ohne Exception-Handling
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
cubrid_set_autocommit($conn, CUBRID_AUTOCOMMIT_FALSE);
// Ersten Datensatz einfügen
cubrid_execute($conn, "INSERT INTO log_entries (message) VALUES ('Eintrag 1')");
// Zweite Operation schlägt fehl
$res = cubrid_execute($conn, "INSERT INTO log_entries (invalid_column) VALUES ('Eintrag 2')");
if (!$res) {
// Rollback: Eintrag 1 wird ebenfalls verworfen
if (cubrid_rollback($conn)) {
echo "Rollback erfolgreich. Keine Einträge wurden gespeichert.\n";
} else {
echo "Rollback fehlgeschlagen!\n";
}
} else {
cubrid_commit($conn);
echo "Transaktion committed.\n";
}
cubrid_disconnect($conn);
?>
// Wichtig · Fallstricke
Auto-Commit beachten: Ist der Auto-Commit-Modus aktiv (Standardeinstellung), hat cubrid_rollback() keine Wirkung, da jede SQL-Anweisung sofort festgeschrieben wird. Stellen Sie sicher, dass Auto-Commit mit cubrid_set_autocommit($conn, CUBRID_AUTOCOMMIT_FALSE) deaktiviert ist, bevor Sie Transaktionen manuell steuern.
Ressourcen freigeben: Nach einem Rollback sollten offene Abfrage-Ressourcen mit cubrid_close_request() freigegeben werden, um Speicherlecks zu vermeiden.
Verbindungsabbruch: Wenn die Verbindung getrennt wird, ohne dass cubrid_commit() aufgerufen wurde, führt CUBRID automatisch einen Rollback der laufenden Transaktion durch.