(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDO::beginTransaction — Inicia una transacción
Desctiva el modo 'autocommit'. Mientras el modo 'autocommit' esté desactivado, no se consignarán los cambios realizados en la base de datos a través de una instancia de PDO hasta que se finalice la transacción con una llamada a PDO::commit(). Una llamada a PDO::rollBack() revertirá todos los cambios de la base de datos y devolverá la conexión al modo 'autocommit'.
Algunas bases de datos, incluida MySQL, ejecután automáticamente un COMMIT implícito cuando una sentencia de definición de lenguaje de base de datos (DDL), tal como DROP TABLE o CREATE TABLE, se ejecutan en una transacción. El COMMIT implícito prevendrá de la reversión de cualquier otro cambio dentro del límite de la transacción.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
Lanza una PDOException si ya hay una transacción iniciada o el controlador no admite transacciones.
Nota: Se emite una excepción inclusi cuando el atributo
PDO::ATTR_ERRMODE
no esPDO::ERRMODE_EXCEPTION
.
Ejemplo #1 Revertir una transacción
El siguiente ejemplo inicia una transacción y ejecuta dos sentencias que modifican la base de datos antes de revertir los cambios. En MySQL, sin embargo, la sentencia DROP TABLE automáticamente consigna la transacción, con lo cual, ninguno de los cambios en la transacción son revertidos.
<?php
/* Iniciar una transacción, desactivando 'autocommit' */
$gbd->beginTransaction();
/* Cambiar el esquema y datos de la base de datos */
$gsent = $gbd->exec("DROP TABLE fruit");
$gsent = $gbd->exec("UPDATE dessert
SET name = 'hamburger'");
/* Reconocer un error y revertir los cambios */
$gbd->rollBack();
/* La conexión a la base de datos ahora vuelve al modo 'autocommit' */
?>