PDO::beginTransaction

(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)

PDO::beginTransaction Inicia uma transação

Descrição

public PDO::beginTransaction ( ) : bool

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.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Erros

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 para PDO::ERRMODE_EXCEPTION.

Exemplos

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 */
?>

Veja Também