php - PHP for 循环插入 SQL
问题描述
你能解释一下为什么这段代码没有插入数据库吗?
//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 注入漏洞(如著名的Little Bobby Tables 卡通)。我与 MySQL 的前工程总监进行了交谈,他说(释义):“没有理由存在多查询,它只会造成伤害。”
您应该一次执行一个 INSERT 语句。没有理由将多个语句附加在一起。
如果您担心多个语句的性能开销,可以将多行附加到单个 INSERT 语句。或者,您可以将一系列单独的 INSERT 语句包装在事务中。
您可能想阅读我的演示文稿快速加载数据!我比较了插入多行数据的各种策略的性能。
推荐阅读
- django - Django admin 访问 change_list 中的所有查询集
- java - 我怎样才能使它在这里 \\.(....|..) 点只是数字 [\\.(....|..)0-9]?(Java)正则表达式,匹配?
- javascript - 随机base64图像(javascript)
- react-native - 添加集群样式时性能不佳
- html - Xml 到 XSLT:获取属性值等等
- mysql - 三个表,一个具有引用其他两个表的外键
- emacs - 如何获取我所有 org-agenda 文件的 TODO 总数 - orgmode
- php - 未定义类型'App\Providers\Passport' laravel 8
- react-native - 在 Redux Saga 函数中放置反应导航的方法
- c++ - 在 std::vector 中就地构造一对不可移动的、不可复制的