PDO::beginTransaction
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDO::beginTransaction — Startet eine Transaktion
Beschreibung
public PDO::beginTransaction():
bool
Einige Datenbanken, darunter auch MySQL, führen automatisch ein implizites
COMMIT durch, wenn innerhalb einer Transaktion eine DDL- (Database
Definition Language) Anweisung wie DROP TABLE oder CREATE TABLE ausgeführt
wird. Durch das implizite COMMIT wird verhindert, dass andere Änderungen,
die in dieser Transaktion vorgenommen wurden, rückgängig gemacht werden
können.
Parameter-Liste
Diese Funktion besitzt keine Parameter.
Rückgabewerte
Gibt bei Erfolg true
zurück. Bei einem Fehler wird false
zurückgegeben.
Fehler/Exceptions
Wenn bereits eine Transaktion gestartet wurde oder der Treiber keine
Transaktionen unterstützt, wird eine PDOException
ausgelöst.
Hinweis: Eine Exception wird auch dann ausgelöst, wenn das Attribut PDO::ATTR_ERRMODE
nicht PDO::ERRMODE_EXCEPTION
ist.
Beispiele
Beispiel #1 Rückgängigmachen (Rollback) einer Transaktion
Im folgenden Beispiel wird eine Transaktion gestartet und es werden zwei
Anweisungen ausgeführt, die die Datenbank verändern, bevor die Änderungen
rückgängig gemacht werden. Bei MySQL wird die Transaktion jedoch durch
die Anweisung DROP TABLE automatisch bestätigt, sodass keine der
Änderungen dieser Transaktion rückgängig gemacht wird.
<?php
/* Starten einer Transaktion, wobei Autocommit deaktiviert wird */
$dbh->beginTransaction();
/* Ändern des Datenbankschemas und der Daten */
$sth = $dbh->exec("DROP TABLE fruit");
$sth = $dbh->exec("UPDATE dessert
SET name = 'hamburger'");
/* Erkennen eines Fehlers und Zurücknehmen der Änderungen */
$dbh->rollBack();
/* Die Datenbankverbindung ist nun wieder im Autocommit-Modus */
?>