miércoles, noviembre 29, 2006

Transacciones en PHP y MySQL

Esto no es nada nuevo, pero me gustaría postearlo aquí debido a que me acaba de servir y estas son dos herramientas muy utilizadas a nivel mundial.

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:

Anónimo dijo...

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!

Anónimo dijo...

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

Anónimo dijo...

para insertar el registro se conprueba asi :
if (!update_sql){
$error_sql=$error_sql+1;
}

pero como compruebo para una actualizacion

hwongu dijo...

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

Anónimo dijo...

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

Anónimo dijo...

Muy bueno, Gracias amigo. Andaba buscando algo sencillo pero efectivo. Muchas personas se complican al vicio.

Anónimo dijo...

Buen aporte Gracias

Cristian dijo...

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