1

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

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

$DBH->lastInsertId()

谢谢!

4

3 回答 3

3

文件说_

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

lastInsertId话虽如此,我在使用MySQL 时从来没有遇到过问题。它总是有效的。

这表面上包装了对MySQL 的调用LAST_INSERT_ID()

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

即,即使您面临频繁的请求,它也应该可以安全使用。

于 2013-10-10T20:54:38.947 回答
2

$DBH->lastInsertId()在 MySQL 的情况下,检索last_insert_id()函数的结果。

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

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

MySQL 和 PDO:理论上 PDO::lastInsertId 会失败吗?

于 2013-10-10T20:56:31.930 回答
-1

文档中所述:

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

于 2013-10-10T20:54:04.497 回答