(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDO::rollBack — Откат транзакции
Откатывает изменения в базе данных сделанные в рамках текущей транзакции, которая была создана методом PDO::beginTransaction(). Если активной транзакции нет, будет выброшено исключение PDOException.
Если в СУБД включен режим автофиксации изменений, эта функция восстановит этот режим после отката.
Некоторые СУБД, влючая MySQL, автоматически неявно фиксируют изменения, когда встречаются операторы языка определения баз данных (DDL), выполняемые в рамках транзакции. Эта неявная фиксация делает невозможным откат других изменений, сделанных в рамках этой транзакции.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Пример #1 Откат транзакции
В следущем примере создается транзакция и выполняются два запроса, которые модифицируют данные в базе, а затем база возвращается к исходному состоянию. В MySQL, тем не менее, выражение DROP TABLE автоматически фиксирует изменения, поэтому ничего откачено не будет.
<?php
/* Начинаем транзакцию, выключаем автофиксацию */
$dbh->beginTransaction();
/* Изменяем схему базы данных и данные в таблицах */
$sth = $dbh->exec("DROP TABLE fruit");
$sth = $dbh->exec("UPDATE dessert
SET name = 'hamburger'");
/* Осознаем свою ошибку и откатываем транзакцию */
$dbh->rollBack();
/* База данных возвращается в режим автофиксации */
?>