PDO::beginTransaction запускает транзакцию (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
bool PDO::beginTransaction (void)
Отключите режим автофиксации. Когда режим автофиксации отключен, изменения, внесенные в базу данных через экземпляры объектов PDO, не фиксируются до тех пор, пока не будет вызван PDO::commit() для завершения транзакции.
Вызов PDO::rollBack() отменит изменения, внесенные в базу данных, и вернет соединение с базой данных в режим автоматической фиксации.
Некоторые базы данных, включая MySQL, автоматически выполняют неявную фиксацию транзакции при выдаче оператора DDL, такого как DROP TABLE или CREATE TABLE.
Неявная фиксация не позволит вам откатить любые другие изменения в рамках этой транзакции.
В следующем примере начинается транзакция и выдаются два оператора, которые изменяют базу данных перед откатом изменений.
Но в MySQL оператор DROP TABLE автоматически фиксирует транзакцию, поэтому любые изменения в этой транзакции не будут отменены.
<?php/* Запустить транзакцию и отключить автоматическую отправку*/$dbh->beginTransaction();/* Изменить структуру и данные базы данных*/$sth = $dbh->exec("DROP TABLE Fruit");$ sth = $dbh->exec("ОБНОВЛЕНИЕ десертного SET name = 'hamburger'");/* Распознаем ошибку и откатываем изменения*/$dbh->rollBack();/* Соединение с базой данных теперь снова в режиме автофиксации*/?>