Si vous ne vous commit
pas rollback
une transaction ouverte, et elle n'est pas commited
n'importe où plus tard dans votre script, il ne sera pas commited
(tel que vu par le moteur de base de données) , et sera automatiquement annulé à la fin de votre script.
Pourtant, je (enfin, presque) toujours commit
ou rollback
explicitement les transactions que j'ouvre, donc :
- Il n'y a pas de risque d'erreur (comme commettre "par erreur" plus tard dans le script)
- Le code est plus facile à lire/comprendre :quand on voit
$db->rollback()
, il sait que je veux que la transaction soit annulée à coup sûr, et il n'a pas à penser "voulait-il vraiment annuler, ou a-t-il oublié quelque chose ? Et qu'en est-il plus tard dans le script ? "
Le moteur de la base de données ne "voit" pas la PDOException :elle est lancée par PHP dans diverses conditions -- mais la base de données n'annule rien par elle-même :
- soit une transaction est validée
- ou il est annulé
- ou il n'est pas explicitement validé ni annulé -- ce qui signifie qu'il n'est pas validé -- ce qui signifie que ce qui a été modifié n'est pas "vraiment" modifié