Как прочитать файл CSV в MySQL с помощью PHP

Возможный дубликат:
Импорт файла CSV непосредственно в MySQL
Экспорт CSV из Mysql

Я хочу прочитать файл CSV, который у меня есть в системе (C:/xampp/htdocs/live/quotes.csv), в мою таблицу MySQL.

Я создал таблицу следующим образом:

mysql_query("CREATE TABLE IF NOT EXISTS datas(
                                 id int(255) NOT NULL auto_increment,
                                 symbol_t char(6) NOT NULL,
                                 last_trade_price_only_t varchar(100) NOT NULL,
                                 a varchar(30) NOT NULL,
                                 b varchar(30) NOT NULL,
                                 c varchar(30) NOT NULL,
                                 d varchar(30) NOT NULL,
                                 e varchar(30) NOT NULL,
                                 PRIMARY KEY (id) 
)");

и теперь хочу записать CSV в таблицу следующим образом:

$location="C:/xampp/htdocs/live/quotes.csv";
$sql = "LOAD DATA LOCAL INFILE '{$location}'
        INTO TABLE '{datas}'
        FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\n'
        ('symbol_t', 'last_trade_price_only_t','a','b','c','d','e')";

mysql_query($sql);

но как-то не работает. Я неправильно указал место?

И у меня появился еще один вопрос. Если я хочу получить внешний CSV-файл (yahoo finanace csv) с URL-адресом: http://finance.yahoo.com/d/quotes.csv?s=$ticker_url&f=sl1=.csv ($ticker_url — это набор символов тикера). Должен ли мой $location var быть только URL-адресом, или мне нужно сначала открыть его с помощью fopen(url)?

в настоящее время:

$data_tablename="data_".date("m_d_Y",time());
$filename="C:\\xampp\\htdocs\\live\\quotes.csv";
$sql = "LOAD DATA LOCAL INFILE '{$filename}'
        INTO TABLE '{$data_tablename}'
        FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\r\n'
        ('symbol_t', 'last_trade_price_only_t','a','b','c','d','e')";

Таблица


person sami_analyst    schedule 05.01.2013    source источник
comment
как-то не работает. Тогда явно что-то не так.   -  person Gordon    schedule 05.01.2013
comment
Попробуйте запустить этот запрос LOAD DATA в MySQL напрямую, чтобы увидеть, возникнут ли какие-либо ошибки - я подозреваю, что {datas} неверен. Нужны ли брекеты? В противном случае попробуйте использовать PHP напрямую для экспорта строк с помощью fputcsv. Кроме того, есть много других идей здесь - не забудьте поискать свои проблемы в Интернете, прежде чем задавать вопросы.   -  person halfer    schedule 05.01.2013
comment
Ах, вы можете проигнорировать часть моего ответа - ваш вопрос изначально спрашивал, как записать в файл CSV. Тем не менее, я понял, что вы хотите прочитать файл CSV в таблицу базы данных - вопрос существенно отредактирован, чтобы сделать это более понятным!   -  person halfer    schedule 05.01.2013


Ответы (1)


Поскольку вы используете Windows, ваши строки в файле CSV, скорее всего, заканчиваются на \r\n, поэтому вам нужно изменить:

LINES TERMINATED BY '\n'

To

LINES TERMINATED BY '\r\n'

Согласно документации:

Если вы сгенерировали текстовый файл в системе Windows, вам, возможно, придется использовать LINES TERMINATED BY '\r\n' для правильного чтения файла, потому что программы Windows обычно используют два символа в качестве разделителя строки. Некоторые программы, такие как WordPad, могут использовать \r в качестве разделителя строк при записи файлов. Для чтения таких файлов используйте LINES TERMINATED BY '\r'.

Также:

'{datas}'

Вероятно, имелось в виду:

'{$datas}'

Также:

('symbol_t', 'last_trade_price_only_t','a','b','c','d','e')";

Должно быть:

(`symbol_t`, `last_trade_price_only_t`, `a`, `b`, `c`, `d`, `e`)";
person cryptic ツ    schedule 05.01.2013
comment
эй загадочный ты снова. сори но не работает. - person sami_analyst; 05.01.2013
comment
@user1791283 user1791283, извините, я изменил свой ответ, так как обнаружил, что он неверен, когда я читал больше. Вы пробовали редактировать выше? - person cryptic ツ; 05.01.2013
comment
@user1791283 user1791283 - могу я сделать несколько предложений? Вместо того, чтобы говорить, что это не работает, лучше использовать ответы как подсказки, которые помогут вам, а не сразу сдаваться. Он также не указывает, что могло пойти не так, например, сообщения об ошибках и т. д., поэтому людям, помогающим вам, придется задавать дополнительные вопросы, чтобы разобраться в вашей проблеме. Настойчивость сделает вас лучшим программистом! :) - person halfer; 05.01.2013
comment
@user1791283 user1791283 вы изменили {datas} на {$data}? или сняли брекеты, если они не должны были быть там? - person cryptic ツ; 05.01.2013
comment
я изменил его на $data_tablename - person sami_analyst; 05.01.2013
comment
$data_tablename=data_.date(m_d_Y,время()); $filename=C:\\xampp\\htdocs\\live\\quotes.csv; $sql = ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФАЙЛ ДАННЫХ '{$filename}' В ТАБЛИЦУ '{$data_tablename}' ПОЛЯ, ЗАКРЫВАЕМЫЕ ',' НЕОБЯЗАТЕЛЬНО ЗАКРЫТЫЕ '\' ЛИНИИ, ЗАКРЫВАЕМЫЕ '\r\n' ('symbol_t', 'last_trade_price_only_t' , 'а', 'б', 'в', 'г', 'д'); - person sami_analyst; 05.01.2013
comment
@ user1791283, вы можете удалить кавычки вокруг имени таблицы. - person cryptic ツ; 05.01.2013
comment
Кстати, попробуйте проверить, какой тип строки заканчивается в файле, поэтому мы не вносим изменения для отладки и не понимаем, что разделитель строки также необходимо изменить. - person cryptic ツ; 05.01.2013
comment
тоже ничего не делал. также пытался удалить их из $filename. - person sami_analyst; 05.01.2013
comment
давайте продолжим это обсуждение в чате - person cryptic ツ; 05.01.2013