2013-10-01 66 views
0

我試圖獲取多個插入行的最後一個插入ID。如何選擇連接值上的最後一個插入ID

RECORD_ID是自動遞增

$sql = "INSERT INTO records (record_id, user_id, status, x) values "; 
     $varray = array(); 

     $rid = $row['record_id']; 
     $uid = $row['user_name']; 
     $status = $row['status']; 
     $x = $row['x']; 

     $varray[] = "('$rid', '$uid', '$status', '$x')"; 

     $sql .= implode(',', $varray); 

     mysql_query($sql); 

     $sql2 = "INSERT INTO status_logs (id, record_id, status_id, date, timestamp, notes, user_id, x) VALUES"; 

     $varray2[] = "(' ', mysql_insert_id(), '$status', '$uid', '$x')"; 

     $sql2 .= implode(',', $varray2); 

     mysql_query($sql2); 

這是結果:

INSERT INTO records (record_id, user_id, notes, x) values ('', '1237615', 'this is a note', 'active') 

INSERT INTO status_logs (log_id, record_id, status_id, date, timestamp, notes, user_id, x) VALUES('', INSERT INTO records (record_id, user_id, notes, x) values ('', '1237615', 'this is a note', 'active') 

INSERT INTO status_logs (log_id, record_id, status_id, date, timestamp, notes, user_id, x) VALUES('', mysql_insert_id(), '1', '2013:05:16 00:00:01', '', this is a note'', '1237615', 'active'), '1', '2013:05:16 00:00:01', '', this is a note'', '1237615', 'active') 

沒有爲mysql_insert_id()沒有價值。

+0

您可能想了解一些有關PDO的信息,這是一種將數據插入sql查詢的更安全的方法。 – Duniyadnd

+0

你可以在選擇'MAX(id)'後立即進行查詢,它不會是傻瓜證明(同時可能有兩個提交),但至少是一個開始,或者接受運行單獨查詢的開銷。 –

回答

0

你混合PHP函數mysql_insert_id()和SQL INSERT語句的語法。

要麼 MySQL使用功能LAST_INSERT_ID()INSERT聲明

INSERT INTO records (user_id, notes, x) VALUES('1237615', 'this is a note', 'active'); 
INSERT INTO status_logs (record_id, status_id, date, timestamp, notes, user_id, x) 
VALUES(LAST_INSERT_ID(), '1', ...); 
     ^^^^^^^^^^^^^^^^^ 

VALUES條款由第一mysql_query()後立即進行到mysql_insert_id()單獨調用檢索最後插入的ID。然後,當您作爲第二個查詢的參數時使用該值。

$sql = "INSERT INTO records (user_id, ...) 
     VALUES(...)"; 
$result = mysql_query($sql); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); //TODO beter error handling 
} 
$last_id = mysql_insert_id(); 
//   ^^^^^^^^^^^^^^^^^^ 

$sql2 = "INSERT INTO status_logs (record_id, ...) 
     VALUES $last_id, ...)"; 
$result = mysql_query($sql); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); //TODO beter error handling 
} 

注:

  • 你不需要在列的列表來指定auto_incremented列。只是省略它。
  • 至少使用某種錯誤在你的代碼

處理在一個側面說明:與其插值查詢字符串,並離開它大開的SQL注射考慮使用prepared statements有兩種mysqli_*PDO

+0

謝謝!它解決了我的問題。 – woninana

0

除非我錯誤地閱讀你的代碼,你是從SQL中調用PHP函數mysql_insert_id

你需要做的是先把它變成一個PHP變量,然後在SQL中使用變量。事情是這樣的:

// Run the first query 
mysql_query($sql); 

// Grab the newly created record_id 
$recordid= mysql_insert_id(); 

然後在第二插件只需使用:

$varray2[] = "(' ', $recordid, '$status', '$uid', '$x')";