使用 For 和 While 循环更新查询

Posted

技术标签:

【中文标题】使用 For 和 While 循环更新查询【英文标题】:Update Query Using For and While Loop 【发布时间】:2021-05-06 06:24:59 【问题描述】:

我想使用 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]; ";
                
            

当我运行查询时:

            // echo $update_quantity;
            if ($con->query($update_quantity) == TRUE) 
                 echo "Data Successfully Updated";
             
             else
                  echo "Error: $update_quantity <br> $con->error";
             

它给出的输出:

Error: UPDATE product SET pquantity = '246' WHERE pid=7; UPDATE product SET pquantity = '11' WHERE pid=32;

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“UPDATE product SET pquantity = '11' WHERE pid=32' 附近使用正确的语法

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

【问题讨论】:

See How can I prevent SQL injection in php?。还要使用multi table UPDATE 语法,这样你就不需要在循环中执行 SQL。 pquantity 是字符串吗? 当你告诉它“一次性”作用于一组行时,SQL 会发光;当你一次只做一行时,SQL 就会陷入困境。 请参阅mysqli::multi_query 或逐一执行您的查询。 【参考方案1】:

在一个语句中你可以这样做:

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;

【讨论】:

感谢朋友,但我的代码运行没有错误,我在另一台机器上运行相同的代码。

以上是关于使用 For 和 While 循环更新查询的主要内容,如果未能解决你的问题,请参考以下文章

c#中的for和while循环

JavaScript循环 while/do while/for的使用

如何使用 while 循环更新行?

Java

js中for循环和while循环在使用的时候有何区别?

js中for循环和while循环在使用的时候有何区别?