2011-09-16 23 views
3

我可以通過mysql_insert_id()在INSERT之後獲得ID;但我想以ID-image_name.jpg的形式保存圖像並將其保存在名爲Image_Name的列中。如何保存即將到來的ID圖像?或者最好在INSERT過程之後保存圖像文件?如何在INSERT之前獲取mysql行的ID

+3

保存後,您無法知道下一個ID會以100%的確定性得到。 –

+0

是否有任何特定的原因,你想包括在圖像的文件名的ID?我只是爲所有傳入文件創建一個隨機文件名,然後將該文件名保存在數據庫記錄中。 –

回答

5

是的,最好在插入後保存圖像。當然,如果保存文件失敗,您將需要撤消INSERT(使用DELETE或回滾事務)。如果使用標準命名方案,則不必再次觸摸數據庫以在表中設置文件名(因爲表中不需要是文件名)。

+1

+1不需要在表格中的文件名首先 –

+0

爲什麼?你能解釋一下嗎? – srivani

+0

@srivani:如果你總是把圖像稱爲'/ some/path/image- $ id。$ ext',那麼你不需要數據庫中的文件名,只需要一個可以粘貼這些部分的函數。你會想要在數據庫中的MIME類型,但會給你擴展名。一個好處是,如果您決定重新安排文件系統,則無需修復數據庫。 –

6

在INSERT過程之後保存它是最直接的方法。

mysql_query("INSERT INTO....."); // etc. etc. 
$id = mysql_insert_id(); 
mysql_query("UPDATE table SET image = '$image_name' WHERE id = '$id'"); 
0

您可以使用臨時唯一名稱(例如20個字母的隨機字符串)保存圖像,並在插入完成後對其進行重命名。

0

正如其他人所說,在INSERT之前,您無法可靠地獲取ID。

如果要求圖像文件名匹配行ID,我會堅持mu的建議(在事務中插入INSERT,保存文件,更新行,COMMIT事務)。

另一種方法(如果您沒有id匹配文件名的要求)將命名文件使用uniqid()。這將允許您保存文件並用單個查詢插入行,而無需保持事務處於打開狀態。