PDO :: lastInsertId()可能不准确吗?

时间:2013-10-10 20:51:54

标签: php mysql pdo

我有一个页面通过AJAX调用脚本,可以从同一个父页面同时异步调用多次。此脚本使用require_once访问具有数据库处理程序的配置脚本。脚本每次都会调用此处理程序的唯一实例,或者如果打开多个副本,当我尝试从该脚本实例获取最后一个插入的ID时,它们都将使用相同的实例并导致不良结果吗? / p>

为了清楚起见,这是我引用的命令:

$DBH->lastInsertId()

谢谢!

3 个答案:

答案 0 :(得分:3)

documentation

  

此方法可能不会在不同的PDO驱动程序中返回有意义或一致的结果,因为底层数据库甚至可能不支持自动增量字段或序列的概念。

话虽如此,我在使用lastInsertId和MySQL时一直没有遇到过问题。它总是奏效。

这表面上包含了对MySQL's LAST_INSERT_ID()

的调用
  

生成的ID基于每个连接在服务器中维护。这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。

即。即使您经常要求使用它也应该是安全的。

答案 1 :(得分:2)

在MySQL的情况下,

$DBH->lastInsertId()检索last_insert_id()函数的结果。

last_insert_id()是基于会话的,这意味着如果您运行了2个PHP脚本,则只能获得每个脚本生成的last_insert_id个。

  

生成的ID在服务器上维护   每个连接基础。这意味着返回的值   给定客户端的函数是生成的第一个AUTO_INCREMENT值   对于影响AUTO_INCREMENT列的最新语句   客户。此值不受其他客户端的影响,即使它们也是如此   生成自己的AUTO_INCREMENT值。此行为可确保   每个客户端都可以检索自己的ID而无需担心   其他客户的活动,无需锁或   交易。

MySQL and PDO: Could PDO::lastInsertId theoretically fail?

答案 2 :(得分:-1)

documentation中所述:

  

注意:此方法可能不会返回有意义或一致的结果   跨越不同的PDO驱动程序,因为底层数据库可能不会   甚至支持自动增量字段或序列的概念。