2011-11-25 22 views
5

私は3つのデータベーステーブルを作成し、トランザクションをロールバックしようとする次のビットのPHPコードを持っています。PHP PDOトランザクション内に複数のテーブルを作成する

$dbh = new \PDO("mysql:host=localhost;dbname=dbname", 'usernamehere', 'passwordhere'); 
$dbh->setAttribute(\PDO::ATTR_AUTOCOMMIT,FALSE); 
$dbh->beginTransaction(); 
$sql = "CREATE TABLE IF NOT EXISTS `a` (`id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;"; 
$dbh->exec($sql); 
$sql = "CREATE TABLE IF NOT EXISTS `b` (`id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;"; 
$dbh->exec($sql); 
$sql = "CREATE TABLE IF NOT EXISTS `c` (`id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;"; 
$dbh->exec($sql); 
$dbh->rollBack(); 

私はテーブルが作成されないと予想しますが、そうではありません。何かご意見は?

+0

専門家ではありませんが、どこかでコミット操作を実行する必要はありませんか? – Julien

答えて

9

manual answersこの質問は、 MySQLのを含め

データベースの中には、自動的にデータベース定義言語(DDL)文のようにDROP TABLEのようまたはCREATE TABLEはトランザクション内で発行されたときに暗黙的にCOMMITを発行します。暗黙的なCOMMITは、トランザクション境界内の他の変更をロールバックできないようにします。

+0

ありがとう、私はそれを逃した私は恥ずかしいです。 – Dave

関連する問題