【发布时间】:2020-08-13 23:50:03
【问题描述】:
将 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,但它们没有加起来。
我错过了什么?
【问题讨论】:
-
定义我无法正常工作
-
您缺少的是说明实际问题是什么,即什么不起作用。我还假设数据库是某种风格的 MySql(你没有说)——它是我知道的唯一一个有
LAST_INSERT_ID的数据库。我的理解是,通过将表达式值设置为对LAST_INSERT_ID的调用,您稍后将能够在没有参数的情况下再次调用LAST_INSERT_ID并检索表达式。从您发布的内容中不清楚它的价值。 -
第一次插入时
LAST_INSERT_ID()是什么? -
谢谢,我补充了。你可以说,
LAST_INSERT_ID()总是返回 0。但请注意,我不需要获取该值,它主要是为了在 dbms 内部工作。 -
问题是 LAST_INSERT_ID 只是 客户端执行的最后一条语句的最后插入 ID。所以它不是数据库中的最后一个值。
标签: php pdo nested prepared-statement last-insert-id