何らかの理由でトランザクションが失敗した場合、コードはエラーが発生したまさにその行で停止します 終了すると、実行は直接catchブロックにジャンプします。したがって、コードブロック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;
}