Para eso ROLLBACK me parece una funcion excelente, pero no funK.
Les cuento basicamente estoy descontando x Cantidad de un producto... esto viene de un form. Antes pasa por una validacion y el problema viene a que si alguien completa una linea con X producto y X cantidad, y en otra linea vuelve a poner el mismo producto con X cantidad, la validacion se filtra un error. Como tambien quiero aprender un poco de MySQL me encontre con ROLLBACK
Bueno lo primero que hice fue:
SET GLOBAL autocommit='OFF'
despues:
Código PHP:
<?php
mysql_query("START TRANSACTION")or die(mysql_error());
foreach ( $_POST as $key => $value ){$$key = $value;}
for( $i = '1' ; $i<=$row ;$i++ )
{
$UPDATE = "UPDATE articulos SET cantidad = cantidad-'$cantidad' WHERE id='$id' AND cantidad-'$cantidad'>= '0'";
mysql_query( $UPDATE )or die( mysql_error() );
$afectadas=mysql_affected_rows();
if($afectadas=='0')
{
mysql_query("ROLLBACK") or die(mysql_error());
echo '<script>alert( "Por algun motivo no se pudo hacer el proceso\n\r Por favor vuelva a intantar");</script>'; exit;
}
}
mysql_query("COMMIT") or die(mysql_error());
En caso esto puede pasar mysql_affected_rows() arroja "0" y ejecuto el ROLLBACK y un alert en javascript.
Caso contrario el COMMIT termina la TRANSACTION.
1- Descuento 2 productos.
2- Obligo al sistema a que intente restar x cantidad de un producto dejando a este en stock negativo.
El Alert de javascript se dispara y termina en exit; pero el ROLLBACK no. (Los dos producto no vuelven a su cantidad original).
Algun comentario