PHP拆分CSV文件和更新到数据库不起作用

时间:2017-04-07 13:50:58

标签: php mysql database csv split

我想拆分一个非常大的CSV文件(20 000行),以便能够将所有内容放入我的MySQL数据库中(在我每小时使用cronjob加载php文件之后)。

所以我找到了拆分文件的代码:

$inputFile = 'Shipping.csv';
$outputFile = 'output';

$splitSize = 1000;

$in = fopen($inputFile, 'r');

$rowCount = 0;
$fileCount = 1;
while (!feof($in)) {
    if (($rowCount % $splitSize) == 0) {
        if ($rowCount > 0) {
            fclose($out);
        }
        $out = fopen($outputFile . $fileCount++ . '.csv', 'w');
    }
    $data = fgetcsv($in);
    if ($data)
        fputcsv($out, $data);
    $rowCount++;
}

fclose($out);

我试过这样做,但它们不起作用:

require_once dirname(__DIR__).'/pdo.php';

$inputFile = 'Shipping.csv';
$outputFile = 'output';

$splitSize = 1000;

//open uploaded csv file with read only mode
$in = fopen($inputFile, 'r');

//skip first line
fgetcsv($in);

$rowCount = 0;
$fileCount = 1;
while (!feof($in)) {
    if (($rowCount % $splitSize) == 0) {
        if ($rowCount > 0) {
            fclose($out);
        }
        $out = fopen($outputFile . $fileCount++ . '.csv', 'w');
    }
    $data = fgetcsv($in);

    if ($data){
        fputcsv($out, $data);
    }


    while(($line = fgetcsv($out)) !== FALSE){
        //check whether member already exists in database with same email
        $prevQuery = "SELECT id FROM shipbp WHERE license = '".$line[1]."'";
        $prevResult = $bdd->query($prevQuery);
        if($prevResult->rowCount() > 0)
        {
            $bdd->query("UPDATE shipbp SET license = '".$line[0]."'");
        }
        else{
            $bdd->query("INSERT INTO shipbp (license) VALUES ('".$line[0]."')");
        }
    }

    $rowCount++;
}

fclose($out);

CSV文件看起来像:

P135460,002,00003,250,AS44563,0.35,,Blabla,17/3/2017 00:00:00,SB,Blabla

我该怎么做?

感谢您的帮助

0 个答案:

没有答案