2013-12-13 33 views
1

我想要在將數據插入數據庫後返回id。使用mysqli_insert_id獲取錯誤的ID

多人同時提交表單的可能性很大。

我不想在結果中顯示錯誤的ID,因爲這個ID也會記錄在另一個數據庫日誌中,並用於上傳顯示給用戶的下一個表單中的文件。

如果有幾個人同時提交mysqli_insert_id可能會提取錯誤的ID,是否有機會?

最好是對該用戶的最新日期條目進行查詢並從該處拉取該ID?

或者我應該使用mysqli_insert_id然後檢查該記錄中的用戶名與該ID以驗證它是正確的?

還是我只是擔心一些不是問題?

感謝您的任何意見,我對此很感興趣。

金:)

+1

「同時」是指毫秒的規模......這取決於有多少用戶/秒的提交,但我難以相信至少叫它。然而,等待一些完整的答案,我們都會學習(: –

+1

IIRC,使用交易應該使這是一個非問題:http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html – Zarathuztra

+0

看:http://php.net/manual/en/mysqli.insert-id.php –

回答

5

last_insert_id()型功能依賴於特定的數據庫連接。你不會得到一些其他並行連接產生的id,你不會得到你在這個3請求之前使用這個腳本所做的連接的id。

它將總是是你特定數據庫連接執行的最後插入的ID。

如果它返回本質上是隨機數的函數,那將是完全無用的函數。例如考慮一系列父母/孩子相關的表格。您插入父記錄,嘗試檢索其ID,並獲取一些OTHER插入的ID?現在,你已經「丟失」了你的新紀錄,並且將把這些孩子關在一個無效的父母身上。

沒有。該功能的工作原理與您所期望的完全相同,您不必擔心獲取錯誤的ID。唯一需要注意的是,它只能檢索到插入ID的LAST。如果你在一行中做了2+插入,你就失去了除最後一個插入之外的所有ID。

-2

可以使用mysql_insert_id這樣

<?php 
$con = mysql_connect("localhost", "peter", "abc123"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

$db_selected = mysql_select_db("test_db",$con); 

$sql = "INSERT INTO person VALUES ('B�rge','Refsnes','Sandnes','17')"; 
$result = mysql_query($sql,$con); 
echo "ID of last inserted record is: " . mysql_insert_id(); 

mysql_close($con); 
?> 
+0

mysql_ *已棄用,請勿使用 – Zarathuztra

+0

我明白只是使用mysqli程序代替mysql,明白了。我的教訓是因爲貶低名單而不得不重寫某些東西,我拋出了我正在使用的這本書,並試圖堅持在線php站點,也許有一天我會忘記過程並專注於面向對象。這個時候的步驟。感謝所有人的輸入。 –