Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在PDO准备的语句中嵌套最后一个_INSERT_ID()?_Php_Pdo_Nested_Prepared Statement_Last Insert Id - Fatal编程技术网

Php 在PDO准备的语句中嵌套最后一个_INSERT_ID()?

Php 在PDO准备的语句中嵌套最后一个_INSERT_ID()?,php,pdo,nested,prepared-statement,last-insert-id,Php,Pdo,Nested,Prepared Statement,Last Insert Id,使用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客户端测试它时,它就如预期的那样工作了。但是,在

使用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,但它们并没有相加


我遗漏了什么?

这确实不起作用,原因如下:

  • LAST_INSERT_ID()在每个连接的第一次调用时返回0,因为没有最后一次插入。不幸的是,它不返回下一个自动增量值
  • 如果将其拆分为单独的命令,首先在同一语句中插入,然后在同一语句中更新,那么最后一个\u INSERT\u ID()将不会在其间更新
  • 此外,“如果混合引用LAST_INSERT_ID()和LAST_INSERT_ID(expr),效果是未定义的”vs
  • 更新的ID将被上次插入的ID()忽略

定义我无法让它工作您缺少的是说明实际问题是什么,即什么不工作。我还假设数据库是MySql的一种风格(你没有说)——它是我所知道的唯一一个具有
LAST\u INSERT\u ID
的数据库。我的理解是,通过将表达式值设置为对
LAST\u INSERT\u ID
的调用,您稍后将能够无参数再次调用
LAST\u INSERT\u ID
,并检索表达式。从你发布的内容中还不清楚它的值。你第一次插入时,
最后一次插入\u ID()
是什么?谢谢,我补充了这个。您可以说,
LAST\u INSERT\u ID()
始终返回0。但请注意,我不需要获取该值,它主要是在dbms内部工作。问题是LAST_INSERT_ID只是客户端执行的最后一条语句的最后一个插入ID。因此,它不是数据库中的最后一个值。看起来您严重滥用了此函数。可能是我的一句话写得不好。然而,我不认为投反对票有任何意义,更不用说解释了。这一教训可能会让其他人避免走同一条死胡同。如果事情确实在某种程度上起作用,那就值得更加努力。感谢@nigel的正确提示/冲动。