Blog de Gonzalo

TRANSACCIONES PDO

Un problema que puede surgir al utilizar pdo es que no todas las bases de datos soportan transacciones, php se ejecuta en modo de auto-commit que ejecuta cada instrucción individual en forma implícita. Si se desea usar transacciones, y no se desea utilizar el modo de auto-commit, es necesario llamar al método PDO::beginTransaction() al inicio de la transacción. Si el manejador de la base de datos no permite el uso de transacciones se producirá una excepción (PDOException). Cuando se acabe de especificar la transacción se pueden utilizar los métodos PDO::Commit para aplicar dichas instrucciones, o bien, PDO::rollBack para abortar dicha transacción.
Con un ejemplo se entdenderá mucho mejor.


try {

$dbh->beginTransaction();
$dbh->exec("INSERT INTO usuarios (name, email)
values ('Juan','juan@dominio.com')");
$dbh->exec("INSERT INTO usuarios (name, email)
values ('Ana','Ana@dominio.com')");
$dbh->exec("INSERT INTO usuarios (name, email)
values ('Sofía','sofia@dominio.com')");
$dbh->exec("INSERT INTO usuarios (name, email)
values ('Mario','mario@dominio.com')");
$dbh->exec("INSERT INTO usuarios (name, email)
values ('Luisa','luisa@dominio.com')");
$dbh->commit();

} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " . $e->getMessage();
}

Nota: Lo ideal es preparar un insert con todos los values para hacer una sola llamada a la base de datos pero lo he hecho así para poner un ejemplo básico.

Compartir en twitter