(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDO::beginTransaction — Inicia uma transação
Desativa o modo de envio automático. Enquanto o modo de envio automático estiver desativado, modificações feitas no banco de dados por meio da instância do objeto PDO não serão enviadas até que você finalize a transação chamando PDO::commit(). Chamar PDO::rollBack() reverterá todas as alterações no banco de dados e retornará a conexão para o modo de envio automático.
Alguns bancos de dados, incluindo o MySQL, emitem automaticamente um COMMIT implícito quando uma instrução de linguagem de definição de banco de dados (DDL) como DROP TABLE ou CREATE TABLE é emitida em uma transação. O COMMIT implícito impedirá que você reverta quaisquer outras alterações dentro do limite da transação.
Retorna TRUE
em caso de sucesso ou FALSE
em caso de falha.
Lança uma PDOException se já houver uma transação iniciada ou se o driver não suportar transações.
Nota: Uma exceção é lançada mesmo quando o atributo
PDO::ATTR_ERRMODE
não está definido paraPDO::ERRMODE_EXCEPTION
.
Exemplo #1 Reverter uma transação
O exemplo a seguir inicia uma transação e emite duas instruções que modificam o banco de dados antes de reverter as alterações. No MySQL, no entanto, a instrução DROP TABLE envia automaticamente a transação de modo que nenhuma das alterações na transação é revertida.
<?php
/* Begin a transaction, turning off autocommit */
$dbh->beginTransaction();
/* Change the database schema and data */
$sth = $dbh->exec("DROP TABLE fruit");
$sth = $dbh->exec("UPDATE dessert
SET name = 'hamburger'");
/* Recognize mistake and roll back changes */
$dbh->rollBack();
/* Database connection is now back in autocommit mode */
?>