在使用准备好的语句执行插入查询后获取自动增量 ID

Posted

技术标签:

【中文标题】在使用准备好的语句执行插入查询后获取自动增量 ID【英文标题】:Get autoincrement id after an insert query performed with a prepared statement 【发布时间】:2010-11-29 18:13:30 【问题描述】:

如果我使用带有 phpmysqli_* 函数的存储过程执行插入查询,有没有办法检索自动增量 id 字段的值?mysqli->insert_id 似乎不起作用。

【问题讨论】:

也许你可以发布你的表定义。或者仔细检查是否有 auto_increment 集。 【参考方案1】:

mysqli->insert_id(其中mysqli 代表您的数据库连接) 必须在插入后直接使用。如果您在同一连接上运行其他查询 在尝试读取 insert_id 之前,您会返回 0。

【讨论】:

【参考方案2】:

您可以在插入后在存储过程中添加此语句:

   SET @saved_id = LAST_INSERT_ID()

然后,调用过程后执行这个查询:

   SELECT @saved_id

【讨论】:

【参考方案3】:

您确定您执行的最后一个查询是 INSERT 吗?

mysqli->insert_id 似乎是正确的答案:

返回值

已更新的AUTO_INCREMENT 字段的值 由上一个查询。如果返回零 没有以前的查询 连接或者如果查询没有 更新 AUTO_INCREMENT 值。

【讨论】:

你是对的,我在我的代码中犯了一个错误,mysqli->insert_id 实际上也适用于准备好的语句。谢谢你..【参考方案4】:

您可以尝试像这样创建query to MySql:

SELECT LAST_INSERT_ID()

不确定它是否适用于存储过程。

【讨论】:

以上是关于在使用准备好的语句执行插入查询后获取自动增量 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用非自动增量 ID 执行插入语句?

SELECT LAST_INSERT_ID() 使用准备好的语句后返回 0

MySQL 和自动增量一致性

限制准备好的语句一次执行一个查询

带有准备好的语句的 PostgreSQL 内部查询

在 sql 查询期间获取 Id 并用于另一个插入语句