[英]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.