Как прочитать CSV, исходящий из URL-адреса, и импортировать выбранные данные в таблицу mysql с помощью PHP?
В настоящее время я использую fopen (), чтобы импортировать весь CSV в таблицу. Затем я фильтрую свои потребности и выделяю переменные на html.
Но зачем импортировать всю таблицу CSV, мне нужно всего несколько значений?
Формат CSV – чистый текст: если вы хотите получить только несколько полей, вам все равно придется читать его от начала и до конца.
Чтобы импортировать данные из CSV в MySQL, вы можете сгенерировать SQL-запрос с помощью PHP:
<?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); }