Jeśli transakcja się nie powiedzie z jakiegokolwiek powodu, kod zatrzymuje się na samym wierszu, w którym wystąpił błąd koniec, a następnie wykonanie przeskakuje bezpośrednio do bloku catch. Więc wystarczy, jak masz to napisane w Code Block 2.
Pamiętaj, że powinieneś zawsze ponownie zgłaszać wyjątek po wycofaniu. W przeciwnym razie nigdy nie będziesz miał pojęcia, co było problemem. Tak powinno być
try{
$stmt = $db->prepare(... 1 ...);
$stmt->execute();
$stmt = $db->prepare(... 2 ...);
$stmt->execute();
$stmt = $db->prepare(... 3 ...);
$stmt->execute();
$db->commit();
return true;
}catch(Exception $e){
$db->rollBack();
throw $e;
}