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 — Valide une transaction
PDO::commit() valide une transaction, remet la connexion
en mode autocommit
en attendant l'appel à la fonction
PDO::beginTransaction() pour débuter une nouvelle transaction.
Cette fonction ne contient aucun paramètre.
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
Une exception PDOException sera lancée si aucune transaction n'est active.
Note: Une exception sera émise même si l'attribut
PDO::ATTR_ERRMODE
ne vaut pasPDO::ERRMODE_EXCEPTION
.
Exemple #1 Valide une transaction basique
<?php
/* Commence une transaction, désactivation de l'auto-commit */
$dbh->beginTransaction();
/* Insérer plusieurs enregistrements sur une base tout-ou-rien */
$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,
));
}
/* Valider les modifications */
$dbh->commit();
/* La connexion à la base de données est maintenant de retour en mode auto-commit */
?>
Exemple #2 Committing a DDL transaction
<?php
/* Commence une transaction, désactivation de l'auto-commit */
$dbh->beginTransaction();
/* Modification du schéma de la base de données */
$sth = $dbh->exec("DROP TABLE fruit");
/* Valide les modifications */
$dbh->commit();
/* La connexion à la base de données est maintenant de retour en mode auto-commit */
?>
Note: Toutes les bases de données n'autorisent pas les transactions à fonctionner sur des déclarations DDL: certaines vont générer des erreurs, tandis que d'autres (y compris MySQL) vont automatiquement valider la transaction après que la première déclaration DDL aura été rencontré.
Keep in mind this bug: https://bugs.php.net/bug.php?id=66528
you could not rely on commit() return value while using MySql