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,而无需关心其他客户端的活动,也无需锁定或事务.