在PDO准备好的语句中嵌套LAST_INSERT_ID()?

问题描述 投票:0回答:1

使用PHP与MySQL和PDO准备好的语句,我想以一种简单,安全和有效的方式模仿一个不透明的id。这个想法是在LAST_INSERT_ID的当前值上添加一个随机值。

INSERT INTO table 
SET id = LAST_INSERT_ID( LAST_INSERT_ID() + FLOOR(1 + (RAND() * 99)) ), 
text = ?,
...

外部表达式设置id,内部调用获取当前值并对其进行修改。当我使用Sequel Pro客户端对其进行测试时,这可以按预期工作。但是,在具有准备好的语句的真实脚本中,最后的插入ID不会得到更新/保存。因此,我的确获得了随机ID,但这些ID并未相加。

我想念什么?

php pdo nested prepared-statement last-insert-id
1个回答
0
投票

我缺少许多原因,为什么这不起作用:

  • LAST_INSERT_ID()在每个连接的第一次调用中返回0,因为没有最后插入。不幸的是,它确实not只是返回了下一个可能的AUTO_INCREMENT值。
  • 如果将它分解为单独的命令,则在同一条语句中先执行INSERT,然后执行UPDATE,则LAST_INSERT_ID()将不会在两者之间进行更新。
  • 此外,“如果混合使用对LAST_INSERT_ID()和LAST_INSERT_ID(expr)的引用,则效果是不确定的” ManualManual
  • 更新的ID将被LAST_INSERT_ID()忽略
© www.soinside.com 2019 - 2024. All rights reserved.