Pokud se transakce z jakéhokoli důvodu nezdaří, kód se zastaví na tom samém řádku, kde došlo k chybě konec pak provedení skočí přímo na blok catch. Stačí tedy, jak to máte napsané v bloku kódu 2.
Pamatujte, že byste měli vždy po vrácení vrátit výjimku znovu. Jinak nikdy nebudete mít tušení, v čem byl problém. Tak by to mělo být
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;
}