![Transacciones MySQLi. Imagen de un cilindro simulando una base de datos y una flecha azul.](DWES03_CONT_R10C_mysqlcommit.png)
Como ya comentamos, si necesitas utilizar transacciones deberás asegurarte de que estén soportadas por el motor de almacenamiento que gestiona tus tablas en MySQL. Si utilizas InnoDB, por defecto cada consulta individual se incluye dentro de su propia transacción. Puedes gestionar este comportamiento con el método autocommit
(función mysqli_autocommit
).
$conProyecto->autocommit(false); // deshabilitamos el modo transaccional automático
Al deshabilitar las transacciones automáticas, las siguientes operaciones sobre la base de datos iniciarán una transacción que deberás finalizar utilizando:
commit
(o la funciónmysqli_commit
). Realizar una operación "commit
" de la transacción actual, devolviendo true si se ha realizado correctamente o false en caso contrario.rollback
(o la funciónmysqli_rollback
). Realizar una operación "rollback
" de la transacción actual, devolviendo true si se ha realizado correctamente o false en caso contrario.
...
$conProyecto->query('DELETE FROM stock WHERE unidades=0'); // Inicia una transacción
$conProyecto->query('UPDATE stock SET unidades=3 WHERE producto="STYLUSSX515W"');
. . .
$conProyecto->commit(); // Confirma los cambios
Una vez finalizada esa transacción, comenzará otra de forma automática.