2013-03-07 97 views
0

「mysql_insert_id - 獲取在最後一個查詢中生成的ID」mysql_insert_id()如何工作?

想象3個在線用戶調用相同的查詢,例如,插入表格。 用戶一插入表中的行,但用戶號。三個將是最後一個調用查詢的用戶,僅在用戶1之後幾毫秒。

什麼會爲用戶1返回mysql_insert_id?這是他的Id還是用戶三的Id?

如果此功能已被棄用,我可以使用什麼?

+0

l00k right - >這個問題的數千個問題已經 – 2013-03-07 15:24:45

+0

可能重複[是mysql \ _insert \ _id線程安全嗎?](http://stackoverflow.com/questions/1808337/is-mysql-insert-id線程安全) – legoscia 2014-03-07 18:47:24

回答

2

插入ID被跟蹤每個連接。沒有持久連接,每個腳本執行都有自己的連接。通過持久連接,每個Apache進程都有自己的MySQL連接(但是每個進程都依次提供結果 - 所以這不是問題)。只要您在與PHP中的INSERT查詢具有相同的頁面負載範圍內調用mysql_insert_id()即可,您沒有問題。

要回答問題的第二部分,您應該使用mysqliPDO(首選)庫。 mysqli有相應的mysqli_insert_idPDO有一個lastInsertId()方法。

+0

+1,但不同意'(首選)' – Mchl 2013-03-07 15:29:54

+0

@Mchl只是嘗試將一個數組綁定到IN()一次,並且您將立即改變主意。 – 2013-03-07 15:38:05

+0

@YourCommonSense哈哈哈。在爲什麼PDO是一個很好的選擇的各種其他原因。它抽象出實現細節。您可以在不必更改代碼的情況下在底層數據庫之間切換。您只需修改不兼容的查詢。 – 2013-03-07 15:43:53