PDO::beginTransaction はトランザクションを開始します (PHP 5 >= 5.1.0、PECL pdo >= 0.1.0)
bool PDO::beginTransaction ( void )
自動コミットモードをオフにします。自動コミット モードがオフになっている場合、PDO オブジェクト インスタンスを通じてデータベースに加えられた変更は、トランザクションを終了するために PDO::commit() が呼び出されるまでコミットされません。
PDO::rollBack() を呼び出すと、データベースに加えられた変更がロールバックされ、データベース接続が自動コミット モードに戻ります。
MySQL などの一部のデータベースは、DROP TABLE や CREATE TABLE などの DDL ステートメントを発行するときに、暗黙的なトランザクション コミットを自動的に実行します。
暗黙的にコミットすると、このトランザクションの範囲内で他の変更をロールバックできなくなります。
次の例では、トランザクションを開始し、変更をロールバックする前にデータベースを変更する 2 つのステートメントを発行します。
ただし、MySQL では、DROP TABLE ステートメントによってトランザクションが自動的にコミットされるため、このトランザクション内の変更はロールバックされません。
<?php/* トランザクションを開始し、自動送信をオフにします*/$dbh->beginTransaction();/* データベース構造とデータを変更します*/$sth = $dbh->exec("DROP TABLE Fruit");$ sth = $dbh->exec("UPDATE dessert SET name = 'hamburger'");/* エラーを認識し、変更をロールバックします*/$dbh->rollBack();/*データベース接続は自動コミット モードに戻りました*/?>