Ключовата част е да зададете PDO в режим на изключение докато да имаш try-catch само за извършване на връщане назад не е необходимо. По този начин кодът ви е наред, няма нужда да го променяте, ако всичко, което искате, е връщане назад при неуспех, стига да имате този ред някъде:
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
В случай на неуспех скриптът ще бъде прекратен, връзката ще бъде затворена и mysql ще се радва да върне транзакцията вместо вас.
В случай, че все пак искате да върнете обратно ръчно, трябва да го правите правилно, а не както е казано в другите отговори. Уверете се, че
- улавяте
Exception
, а неPDOException
, тъй като няма значение кое конкретно изключение е прекъснало изпълнението - вие хвърляте повторно изключение след връщане назад, за да бъдете уведомени за проблема
- също така, че машина за таблици поддържа транзакции (т.е. за Mysql трябва да е InnoDB, а не MyISAM).
Този контролен списък е взет от моята статия което може да ви бъде полезно и в този или много други аспекти.