你能解释一下为什么这段代码没有插入数据库吗?
//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))
的输出始终为 false。
非常感谢
最佳答案
正如上面其他评论所提到的,您应该始终检查 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/