2010-04-16 48 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()处理错误消息,并为用户通知模板