php - 从 multidim 插入值。使用 PDO 的数组需要很长时间。有没有更好的办法?

标签 php mysql database pdo

我得到了一个 650 行的数组。在我的本地计算机上使用 PDO 插入它需要 10-15 秒。 那很慢。这是因为磁盘读/写吗?或者可能是其他原因?

这是我的数组(前 4 行):

Array
(
[0] => Array
    (
        [0] => 3
        [1] => 1
    )

[1] => Array
    (
        [0] => 3
        [1] => 2
    )

[2] => Array
    (
        [0] => 3
        [1] => 5
    )

[3] => Array
    (
        [0] => 8
        [1] => 1
    )
)

这是我的代码:

$stmt = $this->db->prepare("INSERT INTO sl_link_store_category (item_a_ID, item_b_ID) VALUES (:item_a_ID, :item_b_ID)");

foreach($my_array as $row) {
    $stmt->execute(array(':item_a_ID' => $row[0], ':item_b_ID' => $row[1]));
}

解决方案

对于那些想知道的人,她的 e 是我插入多行的解决方案
只使用一个$stmt->execute:

    $input_arr; // This array one has lots of values

    $sql = "INSERT INTO sl_link_store_category (field_a, field_b) VALUES ";

    $i = 0;
    // I create the query string with unique prepared values
    // I could probably have used a for loop since I'm not using any
    // values from $row
    foreach($input_arr as $row) {
      $i++;
      $sql .= "(:field_a_$i, :field_a_$i), ";
    }

    // Remove the last comma (and white space at the end)  
    $sql = substr(trim($sql), 0, -1);

    $stmt = $this->db->prepare($sql);

    // I need to create a new associative array with field name 
    // matching the prepared values in the SQL statement.
    $i = 0;
    $arr = array();

    foreach($input_arr as $row) {
      $i++;
      $arr[":field_a_$i"] = $row[0];
      $arr[":field_b_$i"] = $row[1];  
    }

    $stmt->execute($arr);
  }

最佳答案

缓慢的原因可能因多种因素而异。

考虑使用一个查询插入多条记录PDO Prepared Inserts multiple rows in single query

关于php - 从 multidim 插入值。使用 PDO 的数组需要很长时间。有没有更好的办法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5615745/

相关文章:

php - MySQL 和 PHP 问题

mysql - Left 和 Right Join 提供相同的输出

PHP/MYSQL 统计订购最多的产品

PHP生成XML,获取文档末尾的Extra内容

PHP $_GET 来自 HTML 表格行

mysql - 进度条

.net - 如何使用安装程序分发 mdb 文件?

javascript - 显示外部网站 iframe 的内容并防止 Framekilling

php - 无法在 CentOS 6.4 上使用 NGINX 和 php-fpm 使用 PHP 创建文件

javascript - 同一页面上的 HTML 数据属性不适用于倒计时脚本