PDO 获取多个插入 ID

Posted

技术标签:

【中文标题】PDO 获取多个插入 ID【英文标题】:PDO Get Multiple Insert Ids 【发布时间】:2011-08-21 22:15:10 【问题描述】:

使用 PDO 运行以下查询(实际上,我使用准备好的语句但同样的问题)

INSERT INTO MyTable(MyField) VALUES('Row1'), ('Row2')

如何获取与Row1Row2 相关的记录的ID?

$db->lastInsertId() 按字面意思返回最后一个 ID。

取最后一个 ID,减去记录数并假设范围涵盖我的所有记录是否足够?是否有间隙/跳跃。这个查询是否保证是原子的?

【问题讨论】:

您使用的是哪个存储引擎?创新数据库? MyISAM? 目前是 MyISAM,但我希望将来使用 InnoDb,因此导出架构包括 FK 约束。也就是说,我可以很灵活。 【参考方案1】:

如果您使用的是 MyISAM 表,那么由于表级锁定机制,您只能获得一系列 id。

阅读http://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html#innodb-auto-increment-traditional 后,假设您正在使用“传统”innodb 锁定(很可能是这样),那么对于单个语句,ID 集将是连续的。

【讨论】:

感谢您的回复,能否请您澄清一下 - 在这种情况下,表级锁定(虽然通常很糟糕)可能是一个福音,但 php lastInsertId() 函数即使有多个记录也只返回一个 Id已插入。 如果您插入十行,那么您刚刚插入的 id 范围将是 LAST_INSERT_ID() - 10 - LAST_INSERT_ID()

以上是关于PDO 获取多个插入 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 准备好插入后获取最后一个插入 ID

php PDO - 如何获取最后插入的ID?

使用 PDO 插入时获取自动递增行 ID [重复]

如果需要,插入更新 pdo mysql 查询并获取最后插入的 id

如何在使用 PHP-PDO 记录查询时获取最后一个插入 ID

在 PDO(使用 MySQL)中执行 INSERT 后获取最后插入的行?