";
exit;
}
// 2.- Variable para comprobar que hay suficientes artículos de TODA la cesta
$bien=true;
// 3.- Poner el autocommit en false para que sea una transación
mysqli_autocommit($bd, false);
// 4.- Vamos uno a uno de los artículos de la cesta
foreach($carrito as $codigo => $cantidad){
// 5.- Bloquear el stock del artículo en cuestión
$orden1="SELECT stock FROM productos WHERE codigo=? FOR UPDATE";
// Prepara la consulta
$consulta1=mysqli_prepare($bd,$orden1);
//Comprobación de errores
if (!$consulta1){
echo "Ha ocurrido el error 1
";
exit;
}
// Agrega el codigo (entero) a la sentencia como parametro
mysqli_stmt_bind_param($consulta1,"i",$codigo);
// Ejecuta la consulta preparada (Bloquea el stock del producto correspondientes)
mysqli_stmt_execute($consulta1);
// Vincula las variables con la consulta preparada para almacenar resultados
mysqli_stmt_bind_result($consulta1,$stock);
// Obtiene los resultados de una consulta preparada
mysqli_stmt_fetch($consulta1);
// Cerramos la consulta preparada
mysqli_stmt_close ($consulta1);
// 6.- Si tiene suficientes artículos para vender
if ($stock>=$cantidad) {
// 7.- Hacemos el update
$orden2="UPDATE productos SET stock=? WHERE codigo=?";
$consulta2=mysqli_prepare($bd,$orden2);
if (!$consulta2){
echo "Ha ocurrido el error 2
".mysqli_connect_error().mysqli_connect_errno();
exit;
}
$quedan=$stock-$cantidad;
mysqli_stmt_bind_param($consulta2,"ii",$quedan,$codigo);
mysqli_stmt_execute($consulta2);
mysqli_stmt_close ($consulta2);
} else {
// 8.- Si no hay suficientes artículos me chivo
$bien=false;
break;
}
}
// 9.- Si algo hay mal, rollback. Si todo bien, commit
if (!$bien) {
mysqli_rollback($bd);
echo "
La compra ha sido anulada
"; } else { mysqli_commit($bd); echo "Has realizado la compra correctamente
"; } mysqli_close($bd); ?>