2013-12-16 81 views
3

我有一個註冊頁面,然後將數據插入MySQL中的兩個表。第一個是用戶名/密碼/電子郵件等技術信息,另一個用於個人信息,如姓名/地址等。你可以信任mysql_insert_id嗎?

我的技術信息表有一個主鍵自動增量ID,然後,一旦我在此表中創建行,我立即在通用信息表中創建具有相同ID的另一行。

要獲得該ID,我在第一次插入查詢後立即使用mysql_insert_id()函數。

我的問題是相當一般的:你真的可以相信這個函數,它必然會返回合適的索引嗎?如果我有一個網站,許多用戶每秒註冊一次,它是否仍然可靠,並始終返回ID?或者它只是返回生成的表的最後一個主鍵?

+1

「如果我的網站有很多用戶每秒註冊一次」---是的將是100%可靠的。每個連接一個用戶。 – TheCarver

+0

只是好奇,爲什麼要把技術和個人信息放在單獨的表格中呢? – Mikk

+0

此外,'mysql_insert_id'不再受支持。你應該使用'mysqli_insert_id()'(mysqli)或'PDO :: lastInsertId()'(PDO)。 – TheCarver

回答

2

是的,你可以。

函數是按會話的,但它也只對最後一個查詢有效。

也就是說,您永遠不會有一個用戶「污染」另一個用戶的last_insert_id,但您無法從兩次插入之前恢復insert_id。當你需要連續做幾個插入,直到後來不需要ID時,將它們設置爲變量:

INSERT INTO ... 
SET @foo_id = LAST_INSERT_ID(); 
INSERT INTO ... 
SET @bar_id = LAST_INSERT_ID(); 
INSERT INTO some_join_table VALUES (@foo_id, @bar_id); 
相關問題