Primero que todo necesitamos contar con los servidores (php y mysql) instalados previamente. Luego necesitamos habilitar el soporte INNODB en mysql, ver en este post.
Es importante saber que las transacciones son soportadas solo para las tablas tipo innodb, así que necesitamos crear las tablas o modificarlas con éste tipo. Esto se logra fácilmente con el atributo ENGINE = INNODB.
Aquí esta el código para hacerlo.
Crear:
CREATE TABLE tabla ... ENGINE = INNODB;Modificar:
ALTER TABLE tabla ENGINE = INNODB;No hay que preocuparse con los datos en la modificación ya que no sufren alteraciones.
Luego ya en el código de php tendremos algo como lo siguiente:
$SERVIDOR="TuHost";
$BASE_DATOS="TuBaseDeDatos";
$USUARIO="TuUsuario";
$PASSWORD="TuPassword";
$db = mysql_connect($SERVIDOR,$USUARIO,$PASSWORD);
mysql_select_db($BASE_DATOS,$db);
$error = 0; //variable para detectar error
mysql_query("BEGIN"); // Inicio de Transacción
$result=mysql_query("INSERT INTO tabla1 VALUES (1,1000)");
if(!$result)
$error=1;
$result=mysql_query("INSERT INTO tabla2 VALUES (1,2000)");
if(!$result)
$error=1;
if($error) {
mysql_query("ROLLBACK");
echo "Error en la transaccion";
} else {
mysql_query("COMMIT");
echo "Transacción exitosa";
}
En el código anterior se ven 2 inserciones que se realizarán (COMMIT) si no ocurre ningún error en las dos, en caso contrario se regresarán sus valores anteriores (ROLLBACK).
Bueno espero que les sirva y si tienen alguna duda ya saben; pongan su comentario.
3 comentarios:
HOLA: probe el codigo adaptandolo a mi base de datos, hago tres insert y el tercero da error xq esta duplicado , no funciona el rollback xq las otras dos se insertan el base de datos, no se como hacer, espero me puedas ayudar, gracias!
Pues vea "anónimo" casi no me animo a publicar comentarios en blogs, pero debdio a que note que nadie te respondio me vi en la obligación de ayudarte, probe el ejercicio y el problema por el cual a ti no te da es por que necesitas configurar tu mysql ya que de la version 5.0.2 en aldelante las tablas tipo InnoDb esta desabilitada asi que la tienes que habilitar... si usas apache aqui te muestro una URL de como configurar... http://www.desarrolloweb.com/articulos/habilitando-innobd-en-mysql.html
para insertar el registro se conprueba asi :
if (!update_sql){
$error_sql=$error_sql+1;
}
pero como compruebo para una actualizacion
Publicar un comentario en la entrada