Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/11/2011, 19:19
Avatar de anacona16
anacona16
 
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: Transacciones + PDO

Gracias GatorV por tu repuesta, he hecho un ejemplo con trasacciones leyendo un ejemplo del manual de PHP, he probado este ejemplo en dos BD's diferentes Postgres y MySQL y algo diferente paso en cada una de esas BD's, les cuento:

En Postgres:
Código PHP:
Ver original
  1. foreach($consultaTemporales as $temporal):
  2. *
  3. * * * * * * //Comprubo que las variables no esten vacios de ser asi inserto en la tabla tb_det_ventas
  4. * * * * * * $registrarDetalle * * * * * = $conn->prepare("INSERT INTO tb_det_ventas (codivent, codiprod, cantprod, valoprod) VALUES (?,?,?,?)");
  5. * * * * * * $registrarDetalle->execute(array($codigoVenta, $temporal['codiprod'], $temporal['cantprod'], $temporal['valoprod']));
  6. * * * * endforeach;//Finaliza for

En este ciclo como pueden ver hay una inserción a la base de datos, con las transacciones intente asi como 3 veces y hasta que se realizo la inserción pues el autoincremento o serial subio de 1 a 3 es decir se salto 2 como si los intentos que realizaba si hubieran afectado la tabla.

De igual manera para esta parte de codigo:

Código PHP:
Ver original
  1. //Inserto en la tabla el registro de facturas
  2. * * * * $registrarVenta = $conn->prepare("INSERT INTO tb_ventas (codiclie, codivend, subtvent, ivavent, descvent, totavent, saldvent, fopavent, estavent, fechvent, vencvent) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
  3. * * * * $registrarVenta->bindParam(1, $_POST['cliente'], PDO::PARAM_INT);
  4. * * * * $registrarVenta->bindParam(2, $_POST['vendedor'], PDO::PARAM_INT);
  5. * * * * $registrarVenta->bindParam(3, ceil($subtotal), PDO::PARAM_INT);
  6. * * * * $registrarVenta->bindParam(4, ceil($iva), PDO::PARAM_INT);
  7. * * * * $registrarVenta->bindParam(5, ceil($descuento), PDO::PARAM_INT);
  8. * * * * $registrarVenta->bindParam(6, ceil($totalFinal), PDO::PARAM_INT);
  9. * * * * $registrarVenta->bindParam(7, ceil($pendiente), PDO::PARAM_INT);
  10. * * * * $registrarVenta->bindParam(8, $estado, PDO::PARAM_INT);
  11. * * * * $registrarVenta->bindParam(9, $estado, PDO::PARAM_INT);
  12. * * * * $registrarVenta->bindParam(10, date("Y-m-d", time()), PDO::PARAM_STR);
  13. * * * * $registrarVenta->bindParam(11, $_POST['vencimiento'], PDO::PARAM_STR);
  14. * * * * $registrarVenta->execute();

El codigo de la factura que es un consecutivo pues salto de 1 a tres.

En MySQL: En MySQL paso lo siguiente

Código PHP:
Ver original
  1. foreach($consultaTemporales as $temporal):
  2. *
  3. * * * * * * //Comprubo que las variables no esten vacios de ser asi inserto en la tabla tb_det_ventas
  4. * * * * * * $registrarDetalle * * * * * = $conn->prepare("INSERT INTO tb_det_ventas (codivent, codiprod, cantprod, valoprod) VALUES (?,?,?,?)");
  5. * * * * * * $registrarDetalle->execute(array($codigoVenta, $temporal['codiprod'], $temporal['cantprod'], $temporal['valoprod']));
  6. * * * * endforeach;//Finaliza for

En este ciclo los registros si se insertaron.

Código PHP:
Ver original
  1. //Inserto en la tabla el registro de facturas
  2. * * * * $registrarVenta = $conn->prepare("INSERT INTO tb_ventas (codiclie, codivend, subtvent, ivavent, descvent, totavent, saldvent, fopavent, estavent, fechvent, vencvent) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
  3. * * * * $registrarVenta->bindParam(1, $_POST['cliente'], PDO::PARAM_INT);
  4. * * * * $registrarVenta->bindParam(2, $_POST['vendedor'], PDO::PARAM_INT);
  5. * * * * $registrarVenta->bindParam(3, ceil($subtotal), PDO::PARAM_INT);
  6. * * * * $registrarVenta->bindParam(4, ceil($iva), PDO::PARAM_INT);
  7. * * * * $registrarVenta->bindParam(5, ceil($descuento), PDO::PARAM_INT);
  8. * * * * $registrarVenta->bindParam(6, ceil($totalFinal), PDO::PARAM_INT);
  9. * * * * $registrarVenta->bindParam(7, ceil($pendiente), PDO::PARAM_INT);
  10. * * * * $registrarVenta->bindParam(8, $estado, PDO::PARAM_INT);
  11. * * * * $registrarVenta->bindParam(9, $estado, PDO::PARAM_INT);
  12. * * * * $registrarVenta->bindParam(10, date("Y-m-d", time()), PDO::PARAM_STR);
  13. * * * * $registrarVenta->bindParam(11, $_POST['vencimiento'], PDO::PARAM_STR);
  14. * * * * $registrarVenta->execute();

Aqui el consecutivo siguio correctamente es decir 1, 2, 3,etc...

Cave resaltar que en ninguna de las BD's se insertaron los registros hasta que no hubo conflictos, es decir las trasacciones funcionaron de maravilla, pero como les cuento es pasa en las Bases de Datos que utilice, alguien me puede explicar porque pasa eso?

Gracias.
__________________
Aprendiendo!!!