Ако не commit не rollback отворена транзакция и не е commited навсякъде по-късно във вашия скрипт, той няма да бъде commited (както се вижда от двигателя на базата данни) , и автоматично ще се върне обратно в края на вашия скрипт.
Все пак аз (е, почти) винаги commit или rollback изрично транзакциите, които отварям, така че :
- Няма риск от грешка (като извършване „по грешка“ по-късно в скрипта)
- Кодът е по-лесен за четене/разбиране :когато се види
$db->rollback(), той знае, че искам транзакцията да бъде върната със сигурност и не е нужно да мисли „той наистина ли е искал да се върне назад, или е забравил нещо? и какво ще кажете по-късно в скрипта? "
Двигателят на DB не "вижда" PDOException:той се хвърля от PHP при различни условия - но базата данни не връща нищо от само себе си:
- или транзакцията е ангажирана
- или е върнат назад
- или не е изрично ангажирано, нито е върнато назад – което означава, че не е ангажирано – което означава, че това, което е променено, не е „наистина“ променено