Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/10/2011, 15:42
Avatar de SirDuque
SirDuque
 
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
ROLLBACK No funciona.

Hola chicos estoy buscando los pelos al huevo y no quiero que se me filtre ninguno...

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());
Bueno en el $UPDATE descuento la cantidad de producto si esta resta no deja el stock negativo.
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
__________________
Mono programando!
twitter.com/eguimariano