我有一个页面通过AJAX调用脚本,可以从同一个父页面同时异步调用多次。此脚本使用require_once访问具有数据库处理程序的配置脚本。脚本每次都会调用此处理程序的唯一实例,或者如果打开多个副本,当我尝试从该脚本实例获取最后一个插入的ID时,它们都将使用相同的实例并导致不良结果吗? / p>
为了清楚起见,这是我引用的命令:
$DBH->lastInsertId()
谢谢!
答案 0 :(得分:3)
此方法可能不会在不同的PDO驱动程序中返回有意义或一致的结果,因为底层数据库甚至可能不支持自动增量字段或序列的概念。
话虽如此,我在使用lastInsertId
和MySQL时一直没有遇到过问题。它总是奏效。
这表面上包含了对MySQL's LAST_INSERT_ID()
生成的ID基于每个连接在服务器中维护。这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。
即。即使您经常要求使用它也应该是安全的。
答案 1 :(得分:2)
$DBH->lastInsertId()
检索last_insert_id()
函数的结果。
last_insert_id()
是基于会话的,这意味着如果您运行了2个PHP脚本,则只能获得每个脚本生成的last_insert_id
个。
生成的ID在服务器上维护 每个连接基础。这意味着返回的值 给定客户端的函数是生成的第一个AUTO_INCREMENT值 对于影响AUTO_INCREMENT列的最新语句 客户。此值不受其他客户端的影响,即使它们也是如此 生成自己的AUTO_INCREMENT值。此行为可确保 每个客户端都可以检索自己的ID而无需担心 其他客户的活动,无需锁或 交易。
答案 2 :(得分:-1)
如documentation中所述:
注意:此方法可能不会返回有意义或一致的结果 跨越不同的PDO驱动程序,因为底层数据库可能不会 甚至支持自动增量字段或序列的概念。