2012-09-17 74 views
1

也許我有一些關於mysql_insert_id的愚蠢問題...如果mysql_insert_id同時調用不同的地方和不同的瀏覽器,會發生什麼情況?

我需要在mysql_query(「INSERT INTO」)後面使用mysql_insert_id獲取查詢的最後一個插入ID。

mysql_insert_id先前查詢檢索生成的ID,但我的問題是...名爲test.php的使用下面的代碼

mysql_query("INSERT INTO table (FirstName, LastName) VALUES ('" . $_POST['FirstName'] . "', '" . $_POST['LastName'] . "'); ") 
$lastId = mysql_insert_id(); 
...continues some code using $lastId 

如果test.php的,會發生什麼

一個PHP文件文件在同一時間從不同的地方和不同的瀏覽器調用? 或者如果包含INSERT INTO查詢的其他php文件同時被調用會發生什麼?

究竟是什麼Id獲取mysql_insert_id()? 我們必須處理一個難得的可能性嗎?

我不知道我是否成爲可以理解的......

+0

您可以使用事務來確保該ID不會更改。 – Kermit

回答

4

的PHP manual指出的mysql_insert_id()只返回最近生成的AUTO_INCREMENT值值:

MySQL的SQL函數LAST_INSERT_ID()總是包含最近生成的AUTO_INCREMENT值,並且不與重置的價值查詢。

MySQL的manual狀態下的它會返回根據每個連接的最後AUTO_INCREMENT

已生成保持在服務器上的每個連接的ID。這意味着該函數返回給定客戶端的值是該客戶端影響AUTO_INCREMENT的最新語句生成的第一個AUTO_INCREMENT值。此值不會受其他客戶端的影響,即使它們生成自己的AUTO_INCREMENT值。此行爲可確保每個客戶端都可以檢索自己的ID,而不必關心其他客戶端的活動,而無需鎖定或事務。

另外,你應該停止使用mysql_功能,因爲他們正在deprecated

+0

upvote .......... – arslan

1

您從您的網絡連接上的最後一個查詢返回的自動增量ID。它不會交叉連接,所以兩個腳本不會同時運行。

備註:如果您有選項,請使用mysqli或PDO庫,而不要使用已棄用的mysql libarary。

+0

非常感謝Matt S – AkisC

2

每個客戶將坐在一個單獨的連接。 mysql_insert_id()將基於傳遞的/當前連接獲取最後insert查詢的id。所以你不必擔心多個腳本導致問題。

此外,從上面提供的代碼中,您的腳本容易受到SQL注入攻擊。逃避用戶輸入甚至更好,使用PDO/MySQLi。

+0

非常感謝你們所有人......幫助了我所有的答案......但只有一個我可以檢查:/ ....再次感謝 – AkisC

相關問題