[英]PDO Last Insert ID always the right one?
我有以下代码:
<?
$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 是否可能存在危险?
不,这种情况是不可能的。 方法 $db->lastInsertId() 返回此数据库连接的最后插入的 id。 在其他页面将是另一个连接和另一个最后插入的 id。
PDO 将返回当前活动数据库连接插入的最后一个 ID。
刚刚面临以下情况
有文件post.php
,其中包含另一个文件(如insert.php
)。
在 mysql 中插入的全部代码位于insert.php
在insert.php
是代码$id_of_inserted_row = $db->lastInsertId();
然后在insert.php
是echo $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 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.