2012-02-23 46 views
0

簡短而親切的它:暫存SQL查詢

我有一個表稱爲個人存儲用於不同目的的個人信息的實例。例如,當用戶輸入新場所的細節時,他們也輸入聯繫人的詳細信息。場地詳細信息存儲在一個表格中,個人詳細信息存儲在人員表格中,人員ID添加到場地表格中以鏈接到兩個表格。

我的問題是這樣的: 這是不好的做法?基本上我看到(根據下面的示例代碼),我正在執行到人表中的插入查詢,找到最大的id(假設這是帶有用戶剛剛添加的信息的id),然後執行將查詢插入場地表中,查找最大ID包含

我發現如果您有多個人插入場地,這可能會帶來潛在的危險,那麼您可能會返回並鏈接來自人員桌面的錯誤ID。

什麼是最好的方式來做到這一點,同時仍然保持在一個單獨的表中的個人細節。

$query = "insert into persons (perFirstName, perLastName, perAddr_Line1, perAddr_Suburb, perAddr_Postcode, perPhone_Landline, perPhone_Mobile, perEmail) VALUES ('$firstname','$lastname','$address_line1','$address_suburb','$address_postcode','$phone_landline','$phone_mobile','$emailaddress')"; 
mysql_query($query) or die(); 

if (!mysql_error()){ 
    print "yes"; 
    $perID = mysql_result(mysql_query("select max(callid) from persons"),0,0); 
    $query = "insert into volunteers (perID, volRoleID, volPoliceCheckCompleted) VALUES ('$perID','$role','$policecheck')"; 
}else{ 
    print "no"; 
} 
+4

沒有交易==錯誤結果的可能性 – 2012-02-23 10:52:49

回答

0

我相信你正在尋找LAST_INSERT_ID (),它應該會將最後插入的ID返回給persons表。請參閱文檔here

+0

謝謝,這是完美的。我結束了使用mysql_insert_id()。使用這個php方法而不是mysql方法有什麼不足嗎? – Nate88 2012-02-23 13:01:37

+0

根據所涉及的數據類型,只有一個警告字。 'mysql_insert_id()會將原生MySQL C API函數mysql_insert_id()的返回類型轉換爲long類型(在PHP中名爲int)。如果AUTO_INCREMENT列的列類型爲BIGINT(64位),則轉換可能會導致錯誤的值。相反,在SQL查詢中使用內部MySQL SQL函數LAST_INSERT_ID()。有關PHP最大整數值的更多信息,請參閱整數文檔。(來自php.net/manual/en/function.mysql-insert-id.php) – Bridge 2012-02-23 13:11:32