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.
8 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
También lo podrías mejorar el método poniéndolo en clase y usando transacciones de la siguiente manera
http://hwongu.blogspot.com/2010/12/php-clases-y-registrar-bd-mysql-usando.html
Excelente Aportacion mi buen, me sirvio como guia para la referencia MySQL, y para un desarrollo financiera que estoy Haciendo,dudas sobre aplicaciones financieras hacmagnet0@hotmail.com
Muy bueno, Gracias amigo. Andaba buscando algo sencillo pero efectivo. Muchas personas se complican al vicio.
Buen aporte Gracias
Estaba buscando para conseguir un programa para diseñar paginas web y en general me gusta mucho la tecnología por eso paso mucho tiempo en internet y usando diversos dispositivos. Tambien me entretengo con la play y en general uso el pes 2013
Publicar un comentario