PHP读取csv并使用PDO将其加载到postgres中

时间:2013-04-30 12:12:21

标签: php database postgresql

我有{9}行的.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);
}
?>

我从output文件中获取了csv everysingle单元格。

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

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);
}

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

我的PostgreSQL没有限制(至少我不知道......)

任何人都能解释一下我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

这里有两件事我会改变 A.改变!== FALSE)到!= false),不要问我为什么,它有时候工作 B.不要新建你在循环中记录实例而不设置它,你正在创建2000个新实例,这可能是原因。

答案 1 :(得分:0)

您可以尝试copy语句。我认为它类似于MySql LOAD DATA IN FILE

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

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