2011-11-25 15 views
5

मेरे पास निम्न PHP कोड है, जो तीन डेटाबेस टेबल बनाता है, फिर लेनदेन को वापस रोल करने का प्रयास करता है।PHP पीडीओ एक लेनदेन में एकाधिक टेबल बनाना

$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 समेत कुछ डेटाबेस स्वचालित रूप से एक अंतर्निहित COMMIT जारी करते हैं जब डेटाबेस परिभाषा भाषा (डीडीएल) कथन जैसे ड्रॉप टेबल या तालिका बनाना एक लेनदेन के भीतर जारी किया जाता है। निहित COMMIT आपको लेनदेन सीमा के भीतर किसी अन्य परिवर्तन को वापस लाने से रोक देगा।

+0

धन्यवाद, मैं शर्मिंदा हूं कि मुझे याद आया। – Dave

संबंधित मुद्दे