2013-10-23 65 views
5

我在3〜4年前編程,我記得在2005年的一本關於使用mysql_insert_id檢索last_inser_id的安全性的php安全書中。Codeigniter insert_id()函數正確檢索最後一個插入ID?

在書中說如果同時有幾個請求到服務器(千),可能會使last_insert_id的檢索錯誤,以用戶標識指向其他用戶結束。

現在我們在2013年,你們對此有何評論,特別是使用codeigniter insert_id()。

pd:我試圖找到有關我的問題在其他地方的相關信息,但我沒有找到具體的東西。

回答

7

誰寫的那本書充滿了垃圾。 LAST_INSERT_ID()是特定於連接的,並且連接是特定於當前腳本調用的。我無法想出一個辦法來解決這個問題,而不必在一夜酗酒後重寫一些PHP源代碼。

如果你使用的持久連接

也許,然後如果的最後一個連接做了一個插入和然後你做一個成功的INSERT自己[您檢查返回值,權之前調用LAST_INSERT_ID()],那麼也許可能得到一個不好的價值。然而,我很難想象這是可能的。

只要後立即爲你運行LAST_INSERT_ID()INSERT你只是做了它總是會返回正確的值。

這裏是你如何能打破它,如果你真的想:

$db_obj->insert('some data'); 
$db_obj->some_function_that_also_inserts_but_i_forgot_it_does_that('derp'); 
$id = $db_obj->last_insert_id(); 
+0

謝謝你的評論,我不能給予好評,因爲我的名氣你的答案,但真的謝謝。 –

+0

@JoseFaro點擊複選框接受答案,它的方式*勝過upvote。 – Sammitch