Ако транзакцията се провали поради някаква причина, кодът спира на самия ред, където е възникнала грешка end, след което изпълнението прескача директно към блока за хващане. Така че е достатъчно начина, по който сте го написали в Code Block 2.
Имайте предвид, че трябва винаги да хвърляте отново изключението след връщане назад. В противен случай никога няма да имате представа какъв е бил проблемът. Така трябва да бъде
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;
}