2011-11-25 13 views
5

Ho il seguente pezzo di codice PHP, che crea tre tabelle del database, quindi tenta di eseguire il rollback della transazione.PHP DOP La creazione di più tabelle in una transazione

$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(); 

Mi aspetto che le tabelle non vengano create, ma lo sono. qualche idea?

+0

un esperto, ma non è necessario eseguire un'operazione di commit da qualche parte? – Julien

risposta

9

tale questione il manual answers.

Alcune basi di dati, tra cui MySQL, emettere automaticamente un implicito COMMIT quando un linguaggio di definizione di database (DDL) dichiarazione come DROP TABLE o CREATE TABLE viene rilasciato all'interno di una transazione. Il COMMIT implicito ti impedirà di annullare eventuali altre modifiche all'interno del limite della transazione.

non
+0

Grazie, sono imbarazzato che mi sia mancato. – Dave

Problemi correlati