一尘不染

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

mysql

我已经考虑了一段时间了。

考虑一个比例很大的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是否更安全?


阅读 251

收藏
2020-05-17

共1个答案

一尘不染

只要PDO实施并未真正做到无所事事,那将永远是安全的。以下是来自MySQL的信息last_insert_id

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

2020-05-17