miércoles, 24 de octubre de 2012

TRANSACCIONES MYSQL CON PHP



La transacciones en mysql ¿qué son? ¿cómo se utilizan? ¿para qué sirven?. Estas son las cuestiones que voy a intentar explicar de la manera más simple posible.
¿Qué son las transacciones?
Una
 transacción es un conjunto de operaciones SQL que se ejecutan como un único bloque, es decir, si falla una operación fallan todas. Es una unidad única de trabajo. Si una transacción tiene éxito, todas las modificaciones de los datos realizadas durante la transacción se confirman y se convierten en una parte permanente de la base de datos. Si una transacción encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos.
¿Para qué sirven?
Un
 ejemplo de transacción puede ser una transferencia bancaria… Quitamos saldo a una cuenta y lo añadimos en otra. Si no somos capaces de abonar el dinero en la cuenta de destino, no podemos quitarlo de la cuenta de origen. Como este ejemplo seguro que en vuestra carrera os cruzareis con otros muchos similares en los que tener nociones de cómo manejar esta herramienta os puede resultar realmente útil.
Por último pero no menos importante vamos a ver cómo podemos utilizar esta herramienta con el lenguaje favorito de este blog …PHP
¿Cómo se utilizan con PHP?
En principio php no realiza ninguna función dentro de las transacciones. La única cuestión real que tiene importancia dentro de tu código php es que realice las querys de manera ordenada hacia MySQL.  Para trabajar con transacciones con php y mysql es importante tener en cuenta:
1.     Que tu base de datos tenga soporte para base de datos innodb.
2.     Las transacciones sólo son soportadas sólo para las tablas tipo innodb, así que necesitamos crear las tablas o modificarlas con éste tipo. Ante la pregunta … ¿Cómo me aseguro que mis tablas sean innodb? Ejecutando la siguiente query en tu base de datos : ALTER TABLE tutabla ENGINE = INNODB;
Y ahora un ejemplo básico con código php
<?php
$servidor="TuHost";
$base_de_datos="TuBaseDeDatos";
$usuario="TuUsuario";
$pass="TuPassword";
$dbh = mysql_connect($servidor,$usuario,$pass);
mysql_select_db($base_de_datos,$dbh);
$sql = "SET AUTOCOMMIT=0;";
$resultado = mysql_query($sql, $dbh);
$sql = "BEGIN;";
$resultado = mysql_query($sql, $dbh);
$sql = "SELECT * FROM primera; ";
$resultado = mysql_query($sql, $dbh);
$sql = "INSERT INTO `segunda` (`id`, `descripcion`) VALUES ('', 'Otro
valor');";
$resultado = mysql_query($sql, $dbh);
$sql = "INSERT INTO `primera` (`id`, `ripcion`) VALUES (´´, ´Otro valor´);";
$resultado = mysql_query($sql, $dbh);
if ($resultado) {
echo 'OK';
echo '';
$sql = "COMMIT";
$resultado = mysql_query($sql, $dbh);
}
else
{
echo 'MAL';
echo '
';
echo 'SE EJECUTA EL ROOLBACK';
echo '
';
$sql = "ROLLBACK;";
$resultado = mysql_query($sql, $dbh);
}
?>