Mysql
 sql >> Base de données >  >> RDS >> Mysql

Si une transaction PHP PDO échoue, dois-je explicitement rollback() ?

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é