如何在php mysql中更新多行
我有一些代码可以像这样更新php mysql中的多行如何在php mysql中更新多行,php,mysql,Php,Mysql,我有一些代码可以像这样更新php mysql中的多行 <?php $idOrder = $_GET['idOrder']; $conn = new MySQLi('localhost','root','','project_ecommerce'); $query_select = "SELECT status FROM order_product WHERE id_order='".$idOrder."'"; $sql_select = $conn->query($query
<?php
$idOrder = $_GET['idOrder'];
$conn = new MySQLi('localhost','root','','project_ecommerce');
$query_select = "SELECT status FROM order_product WHERE id_order='".$idOrder."'";
$sql_select = $conn->query($query_select);
$result_select = $sql_select->fetch_assoc();
$status ='';
if ($result_select['status'] == 0) {
$status .= 1;
}else{
$status .= 0;
}
$query_update = "UPDATE order_product SET status='".$status."' WHERE id_order='".$idOrder."'";
$sql_update = $conn->query($query_update);
if ($sql_update == TRUE) {
$query_select_product = "SELECT order_product.id_product AS ID_PRD, order_product.status AS STATUS, order_product.qty AS QTY_ORD, products.stock AS STOCK FROM order_product JOIN products ON order_product.id_product = products.id_product WHERE order_product.id_order ='".$idOrder."'";
$sql = $conn->query($query_select_product);
$result = $sql->fetch_all(MYSQLI_ASSOC);
$stock_update='';
for ($i=0; $i < count($result); $i++) {
if ($result[$i]['STATUS'] == 0) {
$stock_update .= ($result[$i]['STOCK']+$result[$i]['QTY_ORD']);
}else{
$stock_update .= ($result[$i]['STOCK']-$result[$i]['QTY_ORD']);
}
$update_product = "UPDATE products SET stock='".$stock_update."' WHERE id_product='".$result[$i]['ID_PRD']."'";
$sql_update_product = $conn->query($update_product);
}
}
echo $idOrder;
?>
如果状态更新为0,我会给出如下结果:
+----------------+-------+
| id_product | stock |
+----------------+-------+
| PRD-0416-17-1 | 100 |
| PRD-0416-17-10 | 100 |
| PRD-0416-17-11 | 98 |
| PRD-0416-17-12 | 9898 |
+----------------+-------+
+----------------+---------+
| id_product | stock |
+----------------+---------+
| PRD-0416-17-1 | 100 |
| PRD-0416-17-10 | 100 |
| PRD-0416-17-11 | 100 |
| PRD-0416-17-12 | 1009900 |
+----------------+---------+
如何修复它?您正在使用。=在这些赋值中,它将前一行的结果连接到$stock\u update的前一个值。它们应该是=
整个过程可以在一个查询中完成:
UPDATE order_product AS o
JOIN product AS p ON o.id_product = p.id_product
SET o.status = NOT o.status,
p.stock = IF(o.status = 0, p.stock + o.qty_ord, p.stock - o.qty_ord)
WHERE o.id_order = $idOrder
您的代码易受攻击。您应该使用或准备带有绑定参数的语句,如中所述。您在赋值中使用了。=因此您将一行中的值连接到上一行中的值。@AlexHowansky感谢您的建议顺便说一句,整个过程可以在一个UPDATE+JOIN查询中完成,您不需要PHP循环。谢谢@Barmar,我会尝试一下非常感谢@Barmar
UPDATE order_product AS o
JOIN product AS p ON o.id_product = p.id_product
SET o.status = NOT o.status,
p.stock = IF(o.status = 0, p.stock + o.qty_ord, p.stock - o.qty_ord)
WHERE o.id_order = $idOrder