PHP for 循环插入 SQL

标签 php mysql sql loops sql-insert

你能解释一下为什么这段代码没有插入数据库吗?

    //INSERT VALUES IN ORDERS
    $sqlInsert = "";
        for($i = 0; $i < count($_SESSION['cart']); $i++)
        {
            $resSelect = mysqli_fetch_assoc($sqlContent);

            $prodID = $resSelect['ProdID'];
            $price = $resSelect['Price'];
            $quantity = $_SESSION['cart'][$resSelect['ProdID']];
            $sum = ($_SESSION['cart'][$resSelect['ProdID']] * 
            $resSelect['Price']);
            $sqlInsert .= "INSERT into Order (ProdID, 
            Quantity, Price,  Sum, OrderID) 
            VALUES ($prodID, $quantity, $price, $sum, $userID);";

        }
        mysqli_query($dbLink, $sqlInsert);

这是 var_dump($sqlInsert) 的输出:
       INSERT INTO Order (ProdID, quantity, 
       Price, Sum, OrderID) VALUES (1, 4, 200, 800, 10);
       INSERT INTO Order (ProdID, quantity, 
       Price, Sum, OrderID) VALUES (7, 3, 200, 600, 10);
       INSERT INTO Order (ProdID, quantity, 
       Price, Sum, OrderID) VALUES (9, 3, 200, 600, 10);

这在数据库中有效。
var_dump(mysqli_query($dbLink, $sqlInsert)) 的输出总是假的。

提前谢谢了

最佳答案

正如上面的其他评论所提到的,您应该始终检查 mysqli_query() 返回的错误。 .见示例代码:http://php.net/manual/en/mysqli.error.php
mysqli_query()函数不支持执行多条语句。

我愿意 不是 推荐使用 mysqli_multi_query() .使用它几乎没有好处,而且它引入了新的潜在 SQL 注入(inject)漏洞(如著名的 Little Bobby Tables cartoon )。我与 MySQL 的前工程总监进行了交谈,他说(释义):“没有理由存在多查询,它只会造成伤害。”

您应该一次执行一个 INSERT 语句。没有理由将多个语句附加在一起。

如果您担心多个语句的性能开销,可以将多行附加到单个 INSERT 语句。或者,您可以将一系列单独的 INSERT 语句包装在事务中。

您可能想阅读我的演示文稿Load Data Fast!我比较了插入多行数据的各种策略的性能。

关于PHP for 循环插入 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50704531/

相关文章:

php - 减少Foreach嵌套并替换为While循环?

mysql - SQL查询查找最小字段的最常见索引

mysql - 何时在 MySQL 中使用单引号、双引号和反引号

javascript - jQuery/PHP:jQuery函数转换为PHP变量的结果

javascript - 通过按钮使用javascript AJAX功能更新数据库

php - mysqli_real_escape_string 无法正常工作

phpmyadmin 导出到 csv for excel

php - 基于组内条件的MySQL计数记录

c++ - MySQL 异步?

java - cursor.moveToFirst 似乎被跳过