Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用For和While循环更新查询_Php_Mysql_Mysqli_Sql Update_Product Quantity - Fatal编程技术网

Php 使用For和While循环更新查询

Php 使用For和While循环更新查询,php,mysql,mysqli,sql-update,product-quantity,Php,Mysql,Mysqli,Sql Update,Product Quantity,我想使用for循环和while循环运行更新查询。因为我想更新产品的数量 根据总数量减去订单数量后的产品id和总数量,在订单成功后的产品表中。但查询未成功运行 我的代码: // Update Query $update_quantity = ""; for ($i = 0; $i < (count($_SESSION['shopping_cart'])); $i++) {

我想使用for循环和while循环运行更新查询。因为我想更新产品的数量 根据总数量减去订单数量后的产品id和总数量,在订单成功后的产品表中。但查询未成功运行

我的代码:

           // Update Query 
            $update_quantity = "";
            for ($i = 0; $i < (count($_SESSION['shopping_cart'])); $i++) {

                $select_quan = "SELECT * FROM product WHERE pid = {$pid[$i]}";
                $result_quan = mysqli_query($con, $select_quan);

                // $update_quantity .= " UPDATE product SET ";

                while ($row_quan = mysqli_fetch_assoc($result_quan)) {

                    $quantity_after_order[$i] =   $row_quan['pquantity'] - ($pquantity[$i]);

                    $update_quantity .= "UPDATE product SET pquantity = '$quantity_after_order[$i]' WHERE pid=$pid[$i]; ";
                }
            }
您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第1行的“UPDATE product SET pquantity='11',其中pid=32”附近使用的正确语法


如果有另一种方式运行此查询,即在订单成功后根据产品id更新数据库中的数量,请告诉我。

在一条语句中,您可以执行以下操作:

UPDATE product SET pquantity =
    CASE pid
        WHEN 7 THEN '246'
        WHEN 32 THEN '11'
    END
WHERE pid in (7,32);
有时,如果确实有大量行,您可以使用临时表:

CREATE TEMPORARY TABLE product_update (pid int, pquantity varchar(10));
INSERT INTO product_update VALUES (7,'246'),(32,'11'),....;
UPDATE product_update JOIN product USING (pid) SET product.pquantity=product_update.pquantity;
DROP TEMPORARY TABLE product_update;

. 还可以使用语法,这样您就不需要在循环中执行SQL。pquantity是字符串吗?当您告诉它“一次”对一组行执行操作时,SQL会发光;当您一次只执行一行操作时,SQL会陷入困境。请逐个查看或执行您的查询。谢谢Freiends,但我的代码运行时没有错误,我在另一台计算机上运行了相同的代码。
UPDATE product SET pquantity =
    CASE pid
        WHEN 7 THEN '246'
        WHEN 32 THEN '11'
    END
WHERE pid in (7,32);
CREATE TEMPORARY TABLE product_update (pid int, pquantity varchar(10));
INSERT INTO product_update VALUES (7,'246'),(32,'11'),....;
UPDATE product_update JOIN product USING (pid) SET product.pquantity=product_update.pquantity;
DROP TEMPORARY TABLE product_update;