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

Mat*_*tis 11 mysql database pdo

我一直在思考这个问题.

考虑一个巨大比例的Web应用程序,比方说,每秒执行数百万次SQL查询.

我运行我的代码:

$q = $db->prepare('INSERT INTO Table
                 (First,Second,Third,Fourth)
          VALUES (?,?,?,?)');
$q->execute(array($first,$second,$third,$fourth));
Run Code Online (Sandbox Code Playgroud)

然后,我想立即获取最后一个查询的自动递增ID:

$id = $db->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

lastInsertId是否可能失败,即获取我的两个代码块之间执行的某些SQL插入查询的ID ?

二级:

如果它可能失败,那么堵塞这种可能泄漏的最佳方法是什么?

创建另一个SQL查询以从数据库中获取正确的ID会更安全吗?

D.S*_*ley 18

如果PDO的实施没有做一些真正含糊不清的事情,那将永远是安全的.以下是来自MySQL的信息last_insert_id:

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