Как обработать функцию с использованием хранимой процедуры из массива данных - PullRequest
1 голос
/ 16 марта 2020

Я создал функцию, которая проверяет количество перед сохранением данных в таблицу продаж. Эта функция хорошо работает с одиночными переменными и в тот момент, когда переменные после публикации становятся множественными; это не работает, потому что они становятся массивом. Есть ли способ, которым я могу обработать массив, используя идею этой функции? Идея заключается в том, что для каждого набора, скажем, ($ productCode = 2) & ($ amount = 10) проверяются функции, затем говорят ($ productCode = 1) & ($ amount = 20) до последнего набора.

        <?php
            //Checking quantity availability
            //Post variables
            //$productCode=$_POST['productCode'];
            //$quantity=$_POST['quantity'];

            //Equivalent variables
            $productCode = array(2, 1, 7, 2);
            $quantity    = array(10, 20, 30, 40);

            //My wild thought BUT no LUCK
            for ($i = 0; $i < count($productCode); $i++) {
                    $productCode=$productCode[$i];
                    $quantity=$quantity[$i];

            function CheckIfQuantityIsEnough ($productCode,$quantity)
            {
                try
                {
                    $QuantityIsEnough = false;
                    $pdoAssigned = new PDOConfig;
                    //Works perfectly well for one variable set
                    $resultQuantityIsEnough = $pdoAssigned->query("call sp_getStockQuantityCount($productCode,$quantity)");

                    if( $resultQuantityIsEnough->fetchColumn() >0) //the course has been assigned
                        {
                            $QuantityIsEnough = true;
                        }           
                    return $QuantityIsEnough;
                }

                catch (Exception $e) {
                throw $e;   
                }
            }
                }//End For statement


            //Check also if Quantity is enough for that
            if (CheckIfQuantityIsEnough ($productCode,$quantity) == false)
                {
                    $Feedback = "Quantity not enough for this product";

                }   
        ?>  

        //sp_getStockQuantityCount
        CREATE PROCEDURE `sp_getStockQuantityCount`(`vStockTypeID` INT, `vQuantity` DECIMAL(9,0))
        BEGIN
        declare vQuantityNow int;
        declare vQuantitySubtract int;

        set vQuantityNow=(select Quantity from stockquantitytbl where StockTypeID=vStockTypeID limit 1);
        set vQuantitySubtract=(vQuantityNow-vQuantity);

        select count(Quantity) 
        from stockquantitytbl
        where StockTypeID=vStockTypeID and vQuantitySubtract>=0;

        END 

--------------- Редактировать -----------------------

Я сделал покончим с этой функцией и теперь просто нужно использовать хранимую процедуру, как показано ниже:

            <?php
        //Array data
        //$productCode = array(2, 1, 7, 2);
        //$quantity    = array(10, 20, 30, 40);

        //Single set
        $productCode=7;
        $quantity=101;

        $sql="call sp_getStockQuantityCount($productCode,$quantity)";
        $result = $odb -> query($sql);
        if($result->rowcount() > 0) {
            foreach ($result as $row) {

        $QuantityIsEnough = $row['Quantity'];

        if($QuantityIsEnough == 0)
                {
                    $Feedback = "Quantity not enough for this product";

                }       
                else
                {
                    //Insert sale record
                }
            }
        }
    ?>

Один набор работает хорошо, но проблема все еще остается для данных массива, как объяснено выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...