Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 mysql中更新多行_Php_Mysql - Fatal编程技术网

如何在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 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_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