(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDO::beginTransaction — Inicia una transacción
PDO::beginTransaction() desactiva el modo
autocommit
. Cuando el autocommit está desactivado,
las modificaciones realizadas en la base de datos mediante las instancias
de los objetos PDO no se aplican hasta que se finaliza la transacción
llamando a la función PDO::commit().
La llamada a PDO::rollBack() anulará todas las modificaciones
realizadas en la base de datos y restablecerá la conexión en modo autocommit.
Algunas bases de datos, incluyendo MySQL, ejecutarán automáticamente un COMMIT cuando se ejecute una consulta de definición de lenguaje de base de datos (DDL) como DROP TABLE o CREATE TABLE dentro de una transacción. Este COMMIT implícito impedirá anular otras modificaciones realizadas en esta transacción.
Esta función no tiene parámetros.
Se lanza la excepción PDOException si ya se ha iniciado una transacción o si el controlador no soporta transacciones.
Nota: Se emite una excepción inclusi cuando el atributo
PDO::ATTR_ERRMODE
no esPDO::ERRMODE_EXCEPTION
.
Ejemplo #1 Anular una transacción
El siguiente ejemplo inicia una transacción y ejecuta dos consultas que modifican la base de datos antes de anular las modificaciones. En MySQL, sin embargo, la consulta DROP TABLE validará automáticamente la transacción, por lo que ninguna de las modificaciones de la transacción será anulada.
<?php
/* Inicia una transacción, desactivando el auto-commit */
$dbh->beginTransaction();
/* Modificación del esquema de la base de datos y de los datos */
$sth = $dbh->exec("DROP TABLE fruit");
$sth = $dbh->exec("UPDATE dessert
SET name = 'hamburger'");
/* Se detecta un error y se anulan las modificaciones */
$dbh->rollBack();
/* La conexión a la base de datos está ahora de vuelta en modo auto-commit */
?>