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