【问题标题】:Upload Large Excel data into database without looping from PHP将大型 Excel 数据上传到数据库而不从 PHP 循环
【发布时间】:2019-07-08 05:43:00
【问题描述】:

我有一个 .xls 文件,其中包含大量行,我必须将其存储到数据库中。现在我正在循环读取每一行并插入到表中。有什么办法,我可以一次将所有行转储到表格中吗? (没有循环?)

for ($row = 2; $row <= $highestRow; $row++) 
{ 

    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);
    $entityName =$headings[0];
    $entityValue=$rowData[0];

    $rowData[0] = array_combine($headings[0], $rowData[0]);
    $num = count($rowData[0]);                                
    $excelDOB=$rowData[0]['date of birth'];
    $student = array(
                        'name'    =>  $name, 
                    );

    $this->common_model->insert_student_data($student);

}

【问题讨论】:

  • 我不是 CI 人员,但快速搜索一下即可获得 stackoverflow.com/questions/17875706/…,如果它适合您,则可以将其作为重复项关闭。
  • 即使你找到一种方法可以一次性完成,在内部它仍然会遍历每一行。这不是问题。问题是对每一行执行插入查询很慢。在 MySQL 中,在一个 INSERT 查询中插入多行要快得多。

标签: php codeigniter-3


【解决方案1】:

您正在使用 PHPExcel 的 rangeToarray() 来获取每一行。 该范围不仅可以单行使用,也可以多行使用。

$rowData = $sheet->rangeToArray('A1' . ':' . $highestColumn . $highestRow,NULL,TRUE,FALSE);

意思一样

A1:J1
A2:J2
.
.
.
A1:J50

=>

A1:J50

【讨论】:

  • 但仍将此数据插入数据库将需要“for循环”。这不能一次执行,只能按行执行
  • 正如我所说,向 DB 插入多个数据无法在没有循环的情况下执行
【解决方案2】:

您不是在循环中执行查询,而是使用循环构建插入语句,并且一旦循环完成。执行一次查询。 这样一来,所有插入都将在 1 个查询中发生,而不是执行 100/200/n 个查询,性能会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2020-10-14
    • 1970-01-01
    • 2020-05-13
    • 2018-04-13
    • 2020-07-01
    • 2013-12-24
    相关资源
    最近更新 更多