質問: "INSERT INTO..."; $db->exec($query2); $db->commit(); }catch (PDOException $e) { try { $db->rollBack(); } catch (Exception $e2) {} } ``` 私の質問は、 `rollBack()`は `execute()`と `exec()`の両方によるすべての変更をロールバックしますか? `exec()`を使用するのは、 `$ query2` を動的に作成しなければならないため、これははるかに簡単です。
回答: トランザクションの開始からロールバックを実行するまでの間に実行された操作はすべて元に戻ります。どのようにそれらの操作を行ったかは関係ありません - それらはロールバックされます。 もちろん、これはトランザクション対応データベース/テーブルを使用していることを前提としています。たとえば、MySQLのMyISAMテーブルでexec()が、InnODBテーブルでexecute()が実行された場合、InnoDBオペレーションはロールバックされますが、MyISAMには固執しています。