Mysql
 sql >> Database >  >> RDS >> Mysql

Se una transazione PHP PDO fallisce, devo eseguire esplicitamente il rollback()?

Se non commit non rollback una transazione aperta e non è commited ovunque più avanti nel tuo script, non sarà commited (visto dal motore di database) e verrà automaticamente ripristinato alla fine dello script.


Comunque, io (beh, quasi) sempre commit o rollback esplicitamente le transazioni che apro, quindi :

  • Non c'è il rischio di un errore (come commettere "per errore" più avanti nello script)
  • Il codice è più facile da leggere/comprendere :quando si vede $db->rollback() , sa che voglio di sicuro il rollback della transazione e non deve pensare "voleva davvero eseguire il rollback o ha dimenticato qualcosa? e che dire più avanti nella sceneggiatura? "


Il motore DB non "vede" la PDOException:viene generata da PHP in varie condizioni, ma il database non esegue il rollback di nulla da solo:

  • o viene eseguita una transazione
  • o viene eseguito il rollback
  • oppure non è stato eseguito il commit o il rollback in modo esplicito, il che significa che non è stato eseguito il commit, il che significa che ciò che è stato modificato non è "realmente" modificato