2012-04-11 32 views
2

mysql_insert_id()手冊上說能mysql_insert_id()從另一個腳本的查詢得到的值

由於mysql_insert_id()作用於上次執行查詢時,一定要 調用mysql_insert_id()生成查詢後立即值爲 。

此聲明不表示任何範圍。這是一個服務器級的價值嗎?運行多個腳本或一個腳本的多個實例的服務器是否可以爲mysql_insert_id()返回一個值,該值不是由調用腳本的最後一次插入生成的?

回答

3

mysql_insert_id()的作用域是MySQL連接。不是user + password,而是當前腳本的實際連接。 (請注意,MySQL連接也可以是mysql_insert_id的參數)

如果關閉並重新打開MySQL連接,mysql_insert_id()將不會返回前一個插入的id的id。

如果一個id剛剛被添加後被插入,但被另一個腳本執行(我的意思是另一個連接),mysql_insert_id()將返回您的ID,而不是您在另一個連接後實際創建的ID。

實施例:

$c1 = mysql_connect($srv, $usr, $pwd); 
$c2 = mysql_connect($srv, $usr, $pwd); 

$sql = "INSERT INTO table1 (col1, col2) VALUES('x', 'y') " 
mysql_query($sql, $c1); // first insert 
mysql_query($sql, $c2); // second insert 

$id1 = mysql_insert_id($c1); 
$id2 = mysql_insert_id($c2); 

$ ID1將在ID首先插入,$ ID2之後插入的ID。

1

是的,請參閱下面的文章:How to Get the Unique ID for the Last Inserted Row

對於LAST_INSERT_ID(),最近生成的ID保持在 服務器上的每個連接。它不會被另一個 客戶端更改。如果使用非魔術值更新另一個AUTO_INCREMENT 列(即,非NULL值且 不是0),它甚至不會更改。同時使用來自多個客戶端的LAST_INSERT_ID()和AUTO_INCREMENT列 完全有效。每個客戶端 將接收客戶端 執行的最後一條語句的最後一個插入ID。

1

範圍是每個連接。如果腳本的每次運行都打開一個單獨的連接(這是通常發生的事情),那麼它們將具有單獨的作用域。

相關問題