【问题标题】:PHP read csv and load it into postgres with PDOPHP 读取 csv 并使用 PDO 将其加载到 postgres
【发布时间】:2013-04-30 12:12:20
【问题描述】:

我有 9k 行的 .csv 文件。当我使用来自php manual 的脚本时:

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

我从csv 文件中获取了我的output 每个单元格。

当我想将每一行视为记录创建对象并将其存储到数据库中时,就会出现问题。我已将其修改为:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);

        $record= new Record($db);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
                $record->$attributes[$c] =  utf8_encode($data[$c]);
        }
    $record->Store();
    }
    fclose($handle);
}

在这种情况下,我的PostgreSQL 数据库中只存储了大约 2k 条记录,但没有显示异常或错误。我不知道为什么我的循环停止。每次我运行脚本时,它都会加载到我的数据库中,不同数量的记录在 1,6k 和 2,1k 之间。

我没有对我的PostgreSQL 设置任何限制(至少我不知道任何..)

谁能解释我做错了什么?

【问题讨论】:

    标签: php database postgresql


    【解决方案1】:

    这里有两件事我会改变 A. 将 !== FALSE) 更改为 !=false),不要问我为什么,它有时会起作用 B. 不要在没有取消设置的情况下在循环中记录实例,您正在创建 2000 个新实例,这可能是原因。

    【讨论】:

      【解决方案2】:

      你可以试试copy 语句。我相信它类似于MySql LOAD DATA IN FILE

      http://www.postgresql.org/docs/current/static/sql-copy.html

      如果它只是您需要添加的数据,它会比任何其他方法快得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-19
        • 2016-06-28
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多