2011-12-18 120 views
0

我插入一行在用戶表註冊一個新用戶的ID。我想獲得user_id字段(這是自動增量)並在另一個查詢中使用它。這裏提供了一個解決方案: How to get the ID of INSERTed row in mysql?但我想知道如果在我插入一個新行並且在我的php代碼中運行mysql_insert_id()函數之前另一個用戶正確註冊,會發生什麼情況。該函數將返回什麼?獲取插入的行

回答

7

mysql_insert_id()返回特定於當前連接的auto_increment id(這是特定於用戶會話的)。所以,這種類型的競賽條件是安全的。換句話說,兩個同時連接的用戶的插入相互重疊將始終爲自己的會話返回正確的ID,而不會受到干擾。

+0

@AlirezaNoori沒有專門的PHP - 函數調用本地MySQL的函數'LAST_INSERT_ID()',所以真的自己管理這個數據庫。 –

+0

謝謝。哦,是的,我知道它(我閱讀MYSQL文檔),但我說錯了。抱歉。謝謝你糾正我。 –

1

int mysql_insert_id ([ resource $link_identifier ])是你的朋友。

從PHP文件:http://es2.php.net/manual/en/function.mysql-insert-id.php

注:

MySQL連接。如果未指定鏈接標識符,則假定由mysql_connect()打開的最後一個鏈接。如果沒有找到這樣的鏈接,它會嘗試創建一個,就好像調用mysql_connect()時沒有參數一樣。如果未找到或建立連接,則會生成E_WARNING級別錯誤。

由上成功,0以前的查詢爲AUTO_INCREMENT列生成如果先前的查詢不產生一個AUTO_INCREMENT值,或者爲FALSE成立沒有MySQL連接的ID。

mysql_insert_id()將本地的MySQL C API函數mysql_insert_id()的返回類型轉換爲(PHP中指定的int)一個長整型。如果AUTO_INCREMENT列的列類型爲BIGINT(64位),則轉換可能會導致錯誤的值。相反,在SQL查詢中使用內部MySQL SQL函數LAST_INSERT_ID()。有關PHP的最大整數值的更多信息,請參閱整數文檔。

由於mysql_insert_id()作用於上次執行的查詢,可以肯定的是產生價值的查詢之後立即調用mysql_insert_id()。

MySQL的SQL函數LAST_INSERT_ID()的值總是包含最近生成的AUTO_INCREMENT值,並且查詢之間不復位。