【发布时间】:2018-06-05 16:05:30
【问题描述】:
你能解释一下为什么这段代码没有插入数据库吗?
//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 errors 以获取更多信息。您使用的是数字,因此引用不是什么大问题,但您可能希望使用 prepared statements 和 bind_param 以避免 SQL 注入问题和任何可能的未来引用问题。
-
另外,
ORDER是 MySQL 中的关键字,必须用反引号括起来:dev.mysql.com/doc/refman/5.7/en/keywords.html -
mysqli_query 将只执行一个查询,但您传递给它多个查询。你应该使用 (mysqli_multi_query())[w3schools.com/php/func_mysqli_multi_query.asp]
-
感谢它与 mysqli_multi_query() 一起使用
-
不要使用
mysqli_multi_query。它不支持占位符值,这使得它非常危险。
标签: php mysql sql loops sql-insert