準備されたステートメントと準備されていないステートメントのbeginTransaction()とcommit()

私は次のコードを持っています:

try{
 $db->beginTransaction();
 $handler = $db->prepare(...);
 $handler->execute()
 $query2 = "INSERT INTO...";
 $db->exec($query2);
 $db->commit();
}catch (PDOException $e) {
 try { $db->rollBack(); } catch (Exception $e2) {}
}

私の質問は、 rollBack()execute()exec()の両方によるすべての変更をロールバックしますか? exec()を使用するのは、 $ query2 を動的に作成しなければならないため、これははるかに簡単です。

0

1 答え

トランザクションの開始からロールバックを実行するまでの間に実行された操作はすべて元に戻ります。どのようにそれらの操作を行ったかは関係ありません - それらはロールバックされます。

もちろん、これはトランザクション対応データベース/テーブルを使用していることを前提としています。たとえば、MySQLのMyISAMテーブルでexec()が、InnODBテーブルでexecute()が実行された場合、InnoDBオペレーションはロールバックされますが、MyISAMには固執しています。

1
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com