Загрузить файл CSV в MySQL с внешнего URL

0

Например, у меня есть URL-адрес из листов Google, который экспортирует лист в файл CSV:

https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet={sheet_name}

Я хочу, чтобы какой-то механизм обрабатывал внешний файл CSV для вставки в таблицу в MySQL.

У меня нет ни малейшего представления о том, с чего начать.

Обновление 25/03/2019: это мой последний прогресс, благодаря некоторым ответам! Я все еще должен получить CSV в MySQL.

 <?php

$conn = new mysqli($servername, $username, $password, $dbname);

$array = str_getcsv(file_get_contents("https://docs.google.com/spreadsheets/...."));

var_dump($array);

    $name = tempnam('/','csv');
    $fp = fopen($name, 'w'); 

    // $array = str_replace('"', '', $array);

   fputs($fp, implode($array, ',')."\n");


$sql = "DELETE FROM conceptos";
$result = $conn->query($sql);


$sql = "LOAD DATA LOCAL 
    INFILE '$name' INTO TABLE conceptos FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES";

fclose($fp);

?>

Сейчас я создаю временный файл, чтобы попытаться использовать LOAD DATA, однако я получаю разные ошибки, такие как File not found, я смог увидеть это только из командной строки, а не напрямую из моего php-кода.

  • 0
    Этот файл исходит из внешнего URL-адреса, который нужно проанализировать непосредственно в php для вставки в таблицу. Я еще не пришел к ответу относительно того, с чего начать.
  • 0
    Загрузка работает? Вы, вероятно , не хотите создавать локальный файл, а вместо этого открываете соединение с базой данных и пишите прямо туда. Но я был бы удивлен, если бы вы могли открыть эту таблицу без аутентификации. Если вы не видите ошибку, абсолютный шаг № 1, который вам нужно сделать прямо сейчас, это изменить настройки ошибок PHP, чтобы отобразить абсолютно каждую ошибку. В противном случае вы едете вслепую.
Теги:
google-sheets

1 ответ

1
Лучший ответ

Это звучит как 3 шага для меня.

  1. Запросите URL и прочитайте результат в строковую переменную. (см. здесь: запрос веб-сайта, PHP)
  2. Разобрать строку, содержащую данные CSV (см. Здесь: https://www.php.net/manual/en/function.str-getcsv.php).
  3. Вставьте в свою базу данных MySQL (см. Здесь: https://www.w3schools.com/php/php_mysql_insert.asp)

Разобрать так:

<?php 
$Data = str_getcsv($CsvString, "\n"); //parse the rows 
foreach($Data as &$Row) $Row = str_getcsv($Row, ";"); //parse the items in rows 
?>

Удачи!

  • 0
    Вы были правы, первые два шага были решены в одной строке как str_getcsv (file_get_contents (" docs.google.com/spreadsheets/d {key} / gviz / tq? Tqx = out: csv & sheet = {sheet_name}")); Теперь я застрял на шаге 3.
  • 1
    Посмотрите мое редактирование, если вы анализируете таким образом, вы будете перебирать строки csv, имея массив $ Row для каждой строки. Тогда это просто вопрос выполнения оператора вставки для каждой строки.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню