2010-04-16 47 views
0

我有一個文件夾/圖像數組,它可能是1,最多12個。我需要做的是動態添加它們,以便將圖像添加到圖像表中。動態插入php mysql和性能

目前,我有

$directory = "portfolio_images/$id/Thumbs/"; 
$images = glob("" . $directory . "*.jpg"); 

    for ($i= 0; $i <= count($images); $i += 1) { 

mysql_query("INSERT INTO project_images (image_name, project_id)VALUES ('$images[0]', '$id')") or die(mysql_error()); 

} 

,這是好的,但感覺不對,這是怎麼了性能?有沒有更好的辦法?

圖片的最大數量永遠只能將是12

回答

3

有了這個解決方案,你會發送多達12個插入數據庫查詢 - 這意味着高達PHP和MySQL之間的12項要求。

一個可能更快的方法是隻發送一個SQL查詢,它將一次插入多行。

這SQL查詢應該是這樣的:

INSERT INTO project_images (image_name, project_id) 
VALUES ('image name 1', 'id_1'), 
('image name 2', 'id_2'), 
('image name 3', 'id_3'), 
('image name 4', 'id_4') 

在MySQL手冊見12.2.5. INSERT Syntax - 有這樣的查詢的例子。


這意味着您可以更改您的代碼,首先構建該查詢;只有一次調用MySQL。

沒有測試,但我想你可能看起來有點像這樣:

$values = array(); 
$directory = "portfolio_images/$id/Thumbs/"; 
$images = glob("" . $directory . "*.jpg"); 
for ($i= 0; $i <= count($images); $i += 1) { 
    $values[] = "('$images[0]', '$id')"; 
} 

$values_str = implode(', ', $value); 
mysql_query("INSERT INTO project_images (image_name, project_id) VALUES $values_str") or die(mysql_error()); 
1
  1. 你在你的代碼中的錯誤。不是$ images [0]但是$images[$i]
  2. 您的代碼無法遵循正確的SQL語法。 $images[$i]=mysql_real_escape_string($images[$i]) 必須添加

  3. 是的,它可以作爲帕斯卡爾提到

  4. 沒有做另一種方式,不存在性能問題。
  5. 使用or die()是可怕的實踐,用or trigger_error()處理錯誤消息,併爲用戶通知模板