Om transaktionen misslyckas av någon anledning, stannar koden vid raden där felet uppstod avsluta då körningen hoppar direkt till catch-blocket. Så det räcker som du har skrivit det i kodblock 2.
Observera att du bör alltid kasta om undantaget efter återställning. Annars kommer du aldrig att ha en aning om vad som var problemet. Så borde det vara
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;
}