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 originalforeach($consultaTemporales as $temporal):
*
* * * * * * //Comprubo que las variables no esten vacios de ser asi inserto en la tabla tb_det_ventas
* * * * * * $registrarDetalle * * * * * = $conn->prepare("INSERT INTO tb_det_ventas (codivent, codiprod, cantprod, valoprod) VALUES (?,?,?,?)");
* * * * * * $registrarDetalle->execute(array($codigoVenta, $temporal['codiprod'], $temporal['cantprod'], $temporal['valoprod'])); * * * * 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//Inserto en la tabla el registro de facturas
* * * * $registrarVenta = $conn->prepare("INSERT INTO tb_ventas (codiclie, codivend, subtvent, ivavent, descvent, totavent, saldvent, fopavent, estavent, fechvent, vencvent) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
* * * * $registrarVenta->bindParam(1, $_POST['cliente'], PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(2, $_POST['vendedor'], PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(3, ceil($subtotal), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(4, ceil($iva), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(5, ceil($descuento), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(6, ceil($totalFinal), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(7, ceil($pendiente), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(8, $estado, PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(9, $estado, PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(10, date("Y-m-d", time()), PDO
::PARAM_STR); * * * * $registrarVenta->bindParam(11, $_POST['vencimiento'], PDO::PARAM_STR);
* * * * $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 originalforeach($consultaTemporales as $temporal):
*
* * * * * * //Comprubo que las variables no esten vacios de ser asi inserto en la tabla tb_det_ventas
* * * * * * $registrarDetalle * * * * * = $conn->prepare("INSERT INTO tb_det_ventas (codivent, codiprod, cantprod, valoprod) VALUES (?,?,?,?)");
* * * * * * $registrarDetalle->execute(array($codigoVenta, $temporal['codiprod'], $temporal['cantprod'], $temporal['valoprod'])); * * * * endforeach;//Finaliza for
En este ciclo los registros si se insertaron.
Código PHP:
Ver original//Inserto en la tabla el registro de facturas
* * * * $registrarVenta = $conn->prepare("INSERT INTO tb_ventas (codiclie, codivend, subtvent, ivavent, descvent, totavent, saldvent, fopavent, estavent, fechvent, vencvent) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
* * * * $registrarVenta->bindParam(1, $_POST['cliente'], PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(2, $_POST['vendedor'], PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(3, ceil($subtotal), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(4, ceil($iva), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(5, ceil($descuento), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(6, ceil($totalFinal), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(7, ceil($pendiente), PDO
::PARAM_INT); * * * * $registrarVenta->bindParam(8, $estado, PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(9, $estado, PDO::PARAM_INT);
* * * * $registrarVenta->bindParam(10, date("Y-m-d", time()), PDO
::PARAM_STR); * * * * $registrarVenta->bindParam(11, $_POST['vencimiento'], PDO::PARAM_STR);
* * * * $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.