PHP车辆订单生成脚本异常:超出最大限制仍生成订单
问题:车辆订单生成脚本超量问题
我编写了一段PHP脚本,用于随机生成车辆订单,直至达到最大车辆订单限制。脚本首次运行正常,但后续运行时生成的车辆数会超过允许的最大值,通常约为所需数量的两倍。排查许久问题依旧,相关代码如下:
foreach ($industries as $industry) { $indyId = $industry['id']; $cars = getIndyCars($conn, $indyId); //$lastOrderNumber = getLastOrderNumber($conn, $indyId); $orderNumber = generateOrderNumber($conn, $indyId); $industryOrders = []; foreach ($cars as $car) { $id = $car['id']; $maxCars = $car['maxCars']; $loaded = $car['loaded']; $x = 1; $typeId = $car['carType']; $carsAlreadyOrdered = getCarsOrderd($conn, $id); /* * CARS ARE ORDERED ON A RANDOM SCALE BETWWEN THE MAX CARS AND CARS ALREADY ORDERED THEY WILL KEEP ORDERING BETWEEN THE AMOUNT OF CARS LEFT AND THE MAX CARS * EVENTUALLY ORDERES WILL BE PLACED ON A SCHEDULE BUT THAT WILL COME LATER. */ if ($carsAlreadyOrdered < $maxCars) { $remainingCars = $maxCars - $carsAlreadyOrdered; $remainingCars -= $carsOrdered; $carsOrdered = rand(0, $remainingCars); if ($carsOrdered + $remainingCars > $maxCars) { $carsOrdered = 0; } $carOrders = []; echo '<b>' . $carsOrdered . ' Cars ordered for '.$id.'</b> '.$remainingCars.' left<br>'; if ($carsOrdered !== 0) { $carsOrdered = $carsAlreadyOrdered + $carsOrdered; updateCarsOrdered($conn, $id, $carsOrdered); }else{ updateCarsOrdered($conn, $id, $carsOrdered); } $filterCars = getLocalFilterCars($conn, $typeId, $indyId); if (is_array($filterCars) && count($filterCars) > 0) { echo "<td>"; for ($x = 0; $x < $carsOrdered; $x++) { $randomCarIndex = mt_rand(0, count($filterCars) - 1); $randomCar = $filterCars[$randomCarIndex]; //echo $randomCar['filteredCars']; $carId=$randomCar['filteredCars']; $carWeight = 0; if ($loaded == 1) { $payload = getCarPayload($cdbconn, $randomCar['filteredCars']); $carLoad = rand(1, $payload); $carWeight = $carLoad; $totalLoadWgt = (int)$totalLoadWgt + (int)$carLoad; } elseif ($loaded == 0) { $tareWeight = getCarEmptyWeight($cdbconn, $randomCar['filteredCars']); $carWeight = $tareWeight; $totalEmptyWeight = (int)$totalEmptyWeight + (int)$tareWeight; } addOrder($conn, $orderNumber, $indyId, $id, $carId, $loaded, $carWeight); /* $carOrders[] = [ 'car' => $randomCar['filteredCars'], 'loaded' => $loaded, 'payload' => $carWeight ];*/ } } /* if (!empty($carOrders)) { $industryOrders[] = [ 'industryTypeId' => $id, 'orders' => $carOrders ]; }*/ }//IF MAX CARS ORDERED else{ echo "No cars ordered for".$id."<br>"; } }//CarForeach*/ if (!empty($industryOrders)) { ///$jsonIndustryOrders = json_encode($industryOrders); //addOrder($conn, $indyId, $id, $carId, $loaded, $carWeight); //addOrder($conn, $indyId, $jsonIndustryOrders); } }
相关函数说明
第一个函数从数据库获取当前车辆订单数,第二个函数在生成订单时更新车辆订单数。
function getCarsOrderd($conn, $indyId){ $sql = "SELECT * FROM industry_cars WHERE id =?;"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt, $sql)) { header("location: details.php?error=stmtfailed"); exit(); } mysqli_stmt_bind_param($stmt, "s", $indyId); mysqli_stmt_execute($stmt); $resultData = mysqli_stmt_get_result($stmt); if ($row = mysqli_fetch_assoc($resultData)){ return $row['carsOrdered']; }else{ $result = false; return $result; } } function updateCarsOrdered($conn, $indyId, $carsOrdered){ $sql = "UPDATE industry_cars SET carsOrdered = ? WHERE id=?;"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt, $sql)) { header("location: ../details.php?error=stmtfailed");//ssssss exit(); } mysqli_stmt_bind_param($stmt, "ss", $carsOrdered, $indyId); mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); } function getIndustryOrders($conn, $indyId){ $sql = "SELECT * FROM industryorders WHERE industryId = ?;"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt, $sql)) { header("location: details.php?error=stmtfailed"); exit(); } mysqli_stmt_bind_param($stmt, "s", $indyId); mysqli_stmt_execute($stmt); $resultData = mysqli_stmt_get_result($stmt); while ($result = mysqli_fetch_all($resultData, MYSQLI_ASSOC)) { return $result; } }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

