Se você não
commit
não rollback
uma transação aberta e não é commited
em qualquer lugar mais tarde em seu script, ele não será commited
(como visto pelo mecanismo de banco de dados) , e será revertido automaticamente no final do seu script. Ainda assim, eu (bem, quase) sempre
commit
ou rollback
explicitamente as transações que eu abro, então:- Não há risco de erro (como cometer "por engano" posteriormente no script)
- O código é mais fácil de ler/entender :quando se vê
$db->rollback()
, ele sabe que eu quero a reversão da transação com certeza e ele não precisa pensar "ele realmente queria reverter ou esqueceu alguma coisa? e mais tarde no script? "
O mecanismo de banco de dados não "vê" a PDOException :ela é lançada pelo PHP sob várias condições -- mas o banco de dados não reverte nada por si só:
- uma transação é confirmada
- ou foi revertida
- ou não está explicitamente confirmado nem revertido -- o que significa que não está confirmado -- o que significa que o que foi modificado não está "realmente" modificado