如何读取来自URL的CSV并将选定的数据导入使用PHP的MySQL表?
目前,我使用fopen()将整个CSV导入表中。然后,我过滤了我的需求,并回应了HTML上的变量。
但是为什么要导入整个CSV表,我只需要几个值?
CSV格式是纯文本:如果您只想获得几个字段,则仍然必须从头到尾阅读他。
要将数据从CSV导入MySQL,您可以使用PHP生成SQL查询:
<?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);
}
满足您的特定需求:
<?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);
}
只是要牢记上述解决方案的事情。我刚刚实现了它,它运行良好。但是,如果您正在使用大量数据,则一次插入一行将需要很长时间。
有时您别无选择,只能这样做,但是如果您碰巧将记录插入一个空表中,将URL内容转储到temp文件中会快得多,将temp file的temp文件删除需要(在这种情况下是日期和临时),然后将文件上传到一个镜头中。
$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);