Duda con SQL

Kaos

Buenas a todos, tengo una pequeña duda. Tengo un código que contiene 3 consultas SQL (por poner un ejemplo)

$consulta1=mysql_query($consulta_select);
$consulta2=mysql_query($consulta_delete);
$consulta3=mysql_query($consulta_update);

Ahora bien, mi problema es q necesito q se lleven todas a cabo con éxito, y q sino, no se lleve ninguna.

Es decir, me intento explicar mejor, si se hace correctamente la consulta 1 y 2 y hay un corte de electricidad justo al acabar 2 (entonces 3 no puede llegar a hacerse), q ni 1 ni 2 lleguen a modificar la BDD (aunq hayan sido llevadas a cabo con éxito)

Alguna sugerencia? :)

Gracias de antemano

cabron

Esto se hace con transacciones (commit y rollback).

Yo esto lo he hecho en Oracle, cuando usabab mysql hace algunos años no tenía soporte para transacciones, pero me parece que se lo han añadido, míralo a ver.

Te explico muy por encima como funciona, si en se produce un fallo en alguna de esas SQL, entonces se ejecuta el rollback que deshace todos los cambios, si no hay ningún fallo haces commit y se ejecuta todo como una unidad.

Soltrac

Te recomiendo crear un procedimiento almacenado en el servidor y haciendo rollbacks si fallan los resultados.

Busca stored prodedures mysql en google y tendrás 340394'239 tutoriales y ejemplos.

Kaos

Esto debería rular... he estado googleando y me parece q es la única solución. Requiere la BDD en innodb.

<?
// $conn es la variable donde almacenamos el mysql_connect.
mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");

mysql_query("INSERT ...");
mysql_query("INSERT ...");

if(mysql_errno($conn)!= 0) mysql_query("ROLLBACK");
else mysql_query("COMMIT");
?>
IS4kO

Ppalmente te recomendaría que intentaras migrar a procedimientos almacenados, por seguridad, y para una mejor estructuración de capa de datos, la cual te permita hacer los cambios sin tener que meterle mano al codigo fuente de la aplicación

http://www.sommarskog.se/error-handling-II.html

http://msdn.microsoft.com/en-us/library/ms181299.aspx

Un saludo.

yEnS

Haz lo que te comentan, abstraer todo lo posible el tema de la base de datos te ayudará a ganar seguridad, rapidez y limpieza de código.

Échale un vistazo a adodb_lite

Usuarios habituales

  • yEnS
  • IS4kO
  • Kaos
  • Soltrac
  • cabron