2012-04-06 36 views
0

我喜歡爲將通過插入查詢中的字段輸入而創建的文件創建特定的文件名。我喜歡有一個獨特的關鍵。這個關鍵字由一個user_id和一個時間戳組成,並且在這個結尾處,它應該被放置在來自insert插入查詢的生成的insert_id中。應該放置auto_increment no。爲我生成的變量的結尾。所以問題是,我創建了一個變量之前插入查詢解僱,使這個變量將是插入查詢等的一部分:如何在插入查詢前在變量中獲取insert_id

$get_num = $db->query("SELECT COUNT (*) FROM tableA"); 
$num = $query->fetch_assoc(); 
$end = $num + 1; 

$file_id = $id .".". time() .".". $end; 

$insert = $db->query("INSERT INTO tableA (file_id, a, b, c) VALUES('".$file_id."','".$a."','".$b."','".c."')"); 

回答

2

其實,忘了我以前寫的。你不能指望COUNT爲你工作,因爲當一行被刪除時會發生什麼?你將會有重複的值。對你來說最好的選擇是首先創建該行,獲取insert_id,然後使用前面描述的函數file_id。

$uid = uniqid(); 
$insert = $db->query("INSERT INTO tableA (file_id, a, b, c) VALUES('".$uid."','".$a."','".$b."','".c."')"); 

$file_id = $id .".". time() .".". mysql_insert_id(); 
$db->query("UPDATE tableA SET file_id='{$file_id}' WHERE file_id='{$uid}' LIMIT 1;"); 

最後,你仍然必須使用兩個查詢,所以它不需要任何更多的資源。另外,您不再執行COUNT操作。

在其他消息中,請務必閱讀SQLi,具體取決於您的a,b,c變量來自哪裏。

0

這是一個壞主意。做你的插入,然後使用LAST_INSERT_ID。否則,正如@AuthmanApatira指出的那樣,您可能有錯誤的ID。 PHP的這個是mysql_insert_id()

另請注意,如果您的索引列是auto_increment,那麼您甚至不需要擔心該id;數據庫爲你照顧它。你可以在你的查詢運行後得到它。

相關問題