Если вы не commit
не rollback
открыли транзакцию, и она не commited
нигде позже в вашем скрипте, она не будет commited
(как видно ядром базы данных) , и автоматически откатится в конце вашего скрипта.
Тем не менее, я (ну, почти) всегда commit
или rollback
явно транзакции, которые я открываю, так что:
- Нет риска ошибки (как, например, коммит "по ошибке" позже в скрипте)
- Код легче читать / понимать : когда кто-то видит
$db->rollback()
, он знает, что я точно хочу откат транзакции, и ему не нужно думать " он действительно хотел откатиться, или он что-то забыл? и что позже в сценарии?"
Механизм БД не «видит» исключение PDOException: он генерируется PHP при различных условиях - но база данных сама по себе ничего не откатывает:
- либо транзакция совершена
- или откат
- или это явно не зафиксировано и не отменено - что означает, что оно не зафиксировано - что означает, что то, что было изменено, не «действительно» изменено