我已经考虑了一段时间了。
考虑一个比例很大的Web应用程序,例如,每秒执行数百万个SQL查询。
我运行我的代码:
$q = $db->prepare('INSERT INTO Table (First,Second,Third,Fourth) VALUES (?,?,?,?)'); $q->execute(array($first,$second,$third,$fourth));
然后紧接着,我想获取此最后一个查询的自动递增的ID:
$id = $db->lastInsertId();
lastInsertId是否有可能失败,即获取 在 我的两个代码块 之间 执行的某些SQL插入查询的ID ?
次要:
如果失败了,堵塞这种可能的泄漏的最佳方法是什么?
可以肯定的是,创建另一个SQL查询以从数据库中获取正确的ID是否更安全?
只要PDO实施并未真正做到无所事事,那将永远是安全的。以下是来自MySQL的信息last_insert_id:
last_insert_id
生成的ID在每个连接的服务器中维护。这意味着函数返回给定客户端的值是针对该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。即使其他客户端生成自己的AUTO_INCREMENT值,该值也不会受到其他客户端的影响。此行为可确保每个客户端都可以检索自己的ID,而不必担心其他客户端的活动,也不需要锁或事务。