You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:34:51