Jika transaksi gagal karena alasan apa pun, kode berhenti di baris paling tepat di mana kesalahan terjadi akhir maka eksekusi melompat langsung ke blok tangkapan. Jadi cukup seperti yang Anda tulis di Blok Kode 2.
Perhatikan bahwa Anda harus selalu membuang kembali Pengecualian setelah rollback. Jika tidak, Anda tidak akan pernah tahu apa masalahnya. Jadi seharusnya
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;
}