簡體   English   中英

PDO 最后插入 ID 總是正確的嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM