【发布时间】:2019-01-22 16:36:13
【问题描述】:
我有这组查询,它工作正常,只是我只能在我的 UPDATE 查询中从 LAST_INSERT_ID() 中获取一个值;
$query .= "INSERT into itemorders
(itemID,colourID,itemName,itemSize,itemPrice,quantity,orderID) SELECT
itemID,colourID,itemName,itemSize,itemPrice,quantity,
LAST_INSERT_ID() FROM mycart WHERE email='".$email."'; ";
$query .= "UPDATE CatalogueItemsSize p
INNER JOIN itemorders i ON p.size = i.itemSize AND p.colourID =
i.colourID SET p.quantity = p.quantity - i.quantity WHERE i.id =
LAST_INSERT_ID();";
我知道它只能检索最后一个插入的行,我如何循环它以便能够捕获第一个查询中插入的所有值?
目前它只是从 CatalogueItemsSize 表中减去一行。
【问题讨论】:
-
为什么要在 INSERT 子句中调用 last_insert_id()?
-
抱歉在此之前还有更多查询
-
警告:尽可能使用prepared statements来避免在查询中注入任意数据并创建SQL injection bugs。在
mysqli和PDO 中执行这些操作非常简单,其中任何用户提供的数据都使用?或:name指示符指定,稍后使用bind_param或execute填充,具体取决于您是哪个使用。 -
当您将 多个查询 连接到一个执行中时,这看起来也非常令人担忧。您应该始终单独运行每个语句并检查可能导致的任何错误。使用像
mysqli_multi_query这样的函数会产生巨大的安全风险,因为该函数不支持占位符值并且极易被利用。在任何情况下使用它都是不安全的。 -
我相信它是 stackoverflow.com/questions/4637367/… 的副本。但是,一种可能的解决方案是使用
TRIGGER进行INSERT操作以更新另一个表