Keep in mind this bug: https://bugs.php.net/bug.php?id=66528
you could not rely on commit() return value while using MySql
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDO::commit — Bestätigt eine Transaktion
Bestätigt eine Transaktion und versetzt die Datenbankverbindung wieder zurück in den Autocommit-Modus, bis mittels PDO::beginTransaction() eine neue Transaktion gestartet wird.
Diese Funktion besitzt keine Parameter.
Gibt bei Erfolg true
zurück. Bei einem Fehler wird false
zurückgegeben.
Wenn es keine aktive Transaktion gibt, wird eine PDOException ausgelöst.
Hinweis: Eine Exception wird auch dann ausgelöst, wenn das Attribut
PDO::ATTR_ERRMODE
nichtPDO::ERRMODE_EXCEPTION
ist.
Beispiel #1 Bestätigen einer gewöhnlichen Transaktion
<?php
/* Starten einer Transaktion, wobei Autocommit deaktiviert wird */
$dbh->beginTransaction();
/* Einfügen mehrerer Datensätze auf der Basis von Alles-oder-Nichts */
$sql = 'INSERT INTO fruit
(name, colour, calories)
VALUES (?, ?, ?)';
$sth = $dbh->prepare($sql);
foreach ($fruits as $fruit) {
$sth->execute(array(
$fruit->name,
$fruit->colour,
$fruit->calories,
));
}
/* Bestätigen der Änderungen */
$dbh->commit();
/* Die Datenbankverbindung ist nun wieder im Autocommit-Modus */
?>
Beispiel #2 Bestätigen einer DDL-Transaktion
<?php
/* Starten einer Transaktion, wobei Autocommit deaktiviert wird */
$dbh->beginTransaction();
/* Ändern des Datenbankschemas */
$sth = $dbh->exec("DROP TABLE fruit");
/* Bestätigen der Änderungen */
$dbh->commit();
/* Die Datenbankverbindung ist nun wieder im Autocommit-Modus */
?>
Hinweis: Nicht alle Datenbanken unterstützen Transaktionen mit DDL-Anweisungen: Bei einigen werden Fehler gemeldet, während bei anderen (einschließlich MySQL) die Transaktion nach der ersten DDL-Anweisung automatisch bestätigt wird.
Keep in mind this bug: https://bugs.php.net/bug.php?id=66528
you could not rely on commit() return value while using MySql