Php 使用For和While循环更新查询
我想使用for循环和while循环运行更新查询。因为我想更新产品的数量 根据总数量减去订单数量后的产品id和总数量,在订单成功后的产品表中。但查询未成功运行 我的代码: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++) {
// 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;