PDO上次插入ID总是正确的吗?

时间:2012-03-27 14:50:06

标签: php pdo

我有以下代码:

<?
$query =$db->prepare("INSERT INTO a_table (id, a_field) VALUES ('', (:a_field)");
$query->bindParam(":a_field", $a_value);
$query->execute();
$last_id = $db->lastInsertId('a_table');
?>

我想问的是这个。想象一下,当两个人在同一时间加载页面时,是否可能会在检索到最后一个ID之前插入其他人查询,混淆ID?

3 个答案:

答案 0 :(得分:26)

不,这种情况是不可能的。 方法$ db-&gt; lastInsertId()返回此DB连接的最后插入的id。在其他页面中将是另一个连接和另一个最后插入的id。

答案 1 :(得分:6)

PDO将返回当前活动数据库连接插入的最后一个ID。

答案 2 :(得分:1)

刚刚遇到以下情况

让文件post.php包含其他文件(例如insert.php)。

要插入mysql的整个代码位于insert.php

insert.php中是代码$id_of_inserted_row = $db->lastInsertId();

然后在insert.phpecho $id_of_inserted_row;显示正确的值。

echo $id_of_inserted_row;中的post.php显示的值不正确(因为我看到显示7个​​数字小于实际值)。我不明白为什么,只需要考虑到。

<强>更新

很抱歉,上面写的是因为插入两个表并错误地对两个表使用相同的$id_of_inserted_row = $db->lastInsertId();

所以我得到与其他答案相同的结论:lastInsertId()获取最后一行插入的id。

面临的情况。我在mysql中插入了2行。在这种情况下,我看到lastInsertId()是第一个插入行(不是最后一行)的id。不明白为什么... 找到答案https://stackoverflow.com/a/12574752/2118559

  

重要说明:如果使用单个INSERT语句插入多行,则LAST_INSERT_ID()仅返回为第一个插入行生成的值。这样做的原因是可以轻松地为其他服务器重现相同的INSERT语句。