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