【问题标题】:dynamic insert php mysql and performance动态插入php mysql和性能
【发布时间】:2010-04-16 06:43:18
【问题描述】:

我有一个图像文件夹/数组,可能是 1 个,最多 12 个。我需要做的是动态添加它们,以便将图像添加到图像表中。

我现在有

 $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 个。

【问题讨论】:

    标签: php mysql performance insert


    【解决方案1】:

    使用此解决方案,您最多可以向数据库发送 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());
    

    【讨论】:

      【解决方案2】:
      1. 您的代码中有错误。不是 $images[0] 而是 $images[$i]
      2. 您的代码未能遵循正确的 SQL 语法。 $images[$i]=mysql_real_escape_string($images[$i]) 必须添加

      3. 是的,可以按照帕斯卡所说的另一种方式完成

      4. 不,没有性能问题。
      5. 使用or die() 是一种糟糕的做法,使用or trigger_error() 处理错误消息和用户通知模板

      【讨论】:

        猜你喜欢
        • 2014-11-24
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-10
        • 2011-04-17
        • 2011-03-25
        • 2014-05-20
        相关资源
        最近更新 更多