首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取CSV并使用PHP将选定的数据导入mysql

读取CSV并使用PHP将选定的数据导入mysql
EN

Stack Overflow用户
提问于 2016-12-15 10:11:54
回答 2查看 3.8K关注 0票数 0

如何读取来自URL的CSV并使用PHP将选定的数据导入mysql表?

目前,我使用fopen()将整个CSV导入到表中。然后,我根据自己的需要进行筛选,并在html上回显变量。

但是为什么导入整个CSV表,我只需要几个值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-15 10:23:00

CSV格式是纯文本:如果你只想得到几个字段,你仍然必须从头到尾读他。

要将数据从CSV导入到MySQL,可以使用PHP生成SQL:

代码语言:javascript
复制
<?php

$csvData = file_get_contents('http://example.com/yourfile.csv');
$csvDelimiter = ';';

$csvLines = str_getcsv($csvData, "\n");
foreach($csvLines as &$row) 
    $row = str_getcsv($row, $csvDelimiter);

$pairings = [
    // sql field -> csv column
    'firstname' => 0,
    'email' => 2,
    'lastname' => 1
];

$pdo = new PDO(); // Connect to your database

$linesToImport = [];
foreach ($csvLines as $line) {
    $currentLine = [];
    foreach ($pairings as $sqlField => $csvColumn) {
        $currentLine[] = isset($line[$csvColumn]) ? $pdo->quote($line[$csvColumn]) : 'null';
    }
    $linesToImport[] = implode(', ', $currentLine);
}

if (sizeof($linesToImport)) {
    $query = 'INSERT INTO `YourTable` (`' . implode('`, `', array_keys($pairings)) . '`) VALUES (' . implode('), (', $linesToImport) . ')';
    $pdo->exec($query);
}

为您的特殊需要:

代码语言:javascript
复制
<?php

$csvData = file_get_contents('http://example.com/yourfile.csv');
$csvDelimiter = ';';

$csvLines = str_getcsv($csvData, "\n");
foreach($csvLines as &$row) 
    $row = str_getcsv($row, $csvDelimiter);

$pdo = new PDO(); // Connect to your database

$lastTempDate = false;
$lastTemp = false;

foreach ($csvLines as $line) {
    $date = $line[0];
    $temp = $line[1];

    if ($lastTempDate === false || $lastTempDate < $date) {
        $lastTemp = $temp;
        $lastTempDate = $date;
    }
}

if ($lastTempDate !== false) {
    $query = 'INSERT INTO `YourTable` (`date`, `temp`) VALUES (' . $pdo->quote($lastTempDate) . ', ' . $pdo->quote($lastTemp) . ')';
    $pdo->exec($query);
}
票数 1
EN

Stack Overflow用户

发布于 2020-12-07 20:37:55

关于上面的解决方案要记住一些东西。我刚刚实现了它,它运行得很好。但是,如果您正在处理一组非常大的数据,每次插入一行将需要很长时间。

有时,您别无选择,只能这样做,但如果您碰巧将记录插入到空表中,则将URL内容转储到临时文件、只解析所需的那些列(在本例中是日期和临时文件),然后一次性上传文件会快得多。

代码语言:javascript
复制
$SQLLoadQuery = "LOAD DATA LOCAL INFILE `" . $input_file . "` INTO TABLE `" . $table_name . "` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES (`date`,`temp`)";

$Recordset = mysqli_query($dbcon, $query);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41161538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档