【问题标题】:How do I loop last insert id如何循环最后插入 id
【发布时间】: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。在mysqliPDO 中执行这些操作非常简单,其中任何用户提供的数据都使用?:name 指示符指定,稍后使用bind_paramexecute 填充,具体取决于您是哪个使用。
  • 当您将 多个查询 连接到一个执行中时,这看起来也非常令人担忧。您应该始终单独运行每个语句并检查可能导致的任何错误。使用像mysqli_multi_query 这样的函数会产生巨大的安全风险,因为该函数不支持占位符值并且极易被利用。在任何情况下使用它都是不安全的。
  • 我相信它是 stackoverflow.com/questions/4637367/… 的副本。但是,一种可能的解决方案是使用TRIGGER 进行INSERT 操作以更新另一个表

标签: php mysql


【解决方案1】:

最后插入 ID 仅返回最后插入记录的 ID。

如果您需要获取每条插入记录的最后插入 ID,则需要运行 SELECT 语句,获取结果,然后为 SELECT 中的每条记录运行 INSERT 语句,然后使用 @987654321 运行更新@

此外,在您的 INSERT 语句中,last_insert_id() 可能会导致错误或至少会产生意想不到的后果。

【讨论】:

  • 对不起,你能举个例子吗
  • 单独运行每个查询,在每个查询之后获取最后一个插入值。你不能一次撞一堆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多