Заполнение таблицы данными из файла

GrinVich

Новичок
Заполнение таблицы данными из файла

Имеется таблица такой структуры:
PHP:
CREATE TABLE `ip2country` (
  `ip_from` int unsigned NOT NULL default '0',
  `ip_to` int unsigned NOT NULL default '0',
  `country_code2` char(2) NOT NULL default '',
  `country_code3` char(3) NOT NULL default '',
  `country_name` varchar(50) NOT NULL default ''
) TYPE=MyISAM;
Имеется файл ip-to-country.csv с большим количеством строк, данные в виде:
PHP:
"33996344","33996351","GB","GBR","UNITED KINGDOM"
"50331648","69956103","US","USA","UNITED STATES"
"69956104","69956111","BM","BMU","BERMUDA"
"69956112","83886079","US","USA","UNITED STATES"
"94585424","94585439","SE","SWE","SWEDEN"
"100663296","121195295","US","USA","UNITED STATES"
Имееться скрипт, который берет данные из файла и вставляет в таблицу:
PHP:
<?
$csv = "ip-to-country.csv";
$data = file($csv);
$count=count($data);
echo "Количество строк в файле: ".$count;

$link = mysql_connect("localhost", "root", "") or die ("Нет соединения с хостом");
mysql_select_db ("tds") or die ("Нет соединения с базой");

while (list($key, $val) = each($data)) {
    $stroka_bez_kavychek = str_replace('"', '', $val);
    $stroka = explode(",", $stroka_bez_kavychek);
    mysql_query("INSERT INTO ip2country VALUES (".$stroka[0].",".$stroka[1].",'".$stroka[2]."','".$stroka[3]."','".$stroka[4]."')") or die("Ошибка запроса");
    echo "Строка ".$key."добавлена\r\n<br>\r\n";
} 

mysql_close($link);
?>

При выполнении скрипта из за большого количества запросов он останавлевается на 9623 строке.
Посоветуйте как можно исправить данную проблему и дайте советы как можно оптимизировать данный код.
И прошу простить меня за ужасный код =) Я учусь )
С уважением...
 

Pustota

Новичок
Я бы для начала посмотрел 9623 строчку. Возможно там в названии государства какой-нидуь апостроф стоит. Вот она на неё и ругается.
 

GrinVich

Новичок
Я так и сделал, там все нормально.
Точно знаю, что ошибка из за большого количества запросов.
Сейчас нашел информацию, анализирую.

http://www.hostinfo.ru/articles/864
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
http://a4.users.phpclasses.org/browse/package/2917.html
http://groups.google.com/group/ua_mysql/
http://ua2.php.net/manual/ru/function.fgetcsv.php
 

madproger[777]

Новичок
А с какой ошибкой останавливается выполнение скрипта?

Не проверял, может у тебя выполнение скрипта длится больше чем разрешено в php.ini?

По умолчанию:
max_execution_time = 30
 

Фанат

oncle terrible
Команда форума
файл ip-to-country.csv с большим количеством строк надо заносить в базу запросом LOAD DATA INFILE
 

GrinVich

Новичок
Вообщим через phpMyAdmin выполняется без проблем, а в скрипте нет.
Вот написанный мною код скрипта:
PHP:
<?php
$link = mysql_connect("localhost", "root", "");
mysql_select_db ("tds");

 $sql = "LOAD DATA INFILE 'T:\\home\\localhost\\http\\ip2country\\ip-to-country.csv' INTO TABLE `ip2country` FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'"; 

mysql_query($sql);
mysql_close($link);
?>
Почему?
 

GrinVich

Новичок
Толку от дебуга нету и какую переменную из этого срипта мне проверять при помощи var_dump =)

-~{}~ 19.02.07 22:04:

Вообщем после долгово ковыряния гугля я понял, что команда LOAD DATA INFILE запрещена на хостинге для увелечения безопасности,
чтобы нельзя было считать любой локальный файл.

Что касается функции fgetcsv, то все равно файл полностью в базу не подгружжаеться, т.к. происходит большое количество запросов INSERT к БД и она падает.

Есть какие нибудь советы?
 

Фанат

oncle terrible
Команда форума

Quessir

Новичок
Ну вообще-то 9623 это достаточно много. Ты посмотрел max_execution_time?
 

GrinVich

Новичок
Автор оригинала: Фанат
не понял юмора.

и что - гугль написал тебе про твой хостинг? а можно почитать тоже?
Я имею ввиду, то, что со своего компа файл загрузить в БД можно, а считать файл с сервера, где находиться скрипт нельзя из за настроек безопасности.
Т.е. команда LOAD DATA LOCAL INFILE выполняеться, а команда LOAD DATA INFILE нет.

max_execution_time я поставил бесконечное.

Дело в количестве запросов к БД.
 

Фанат

oncle terrible
Команда форума
какое отношение LOAD DATA LOCAL INFILE имеет к "своему компу"?
при чем здесь гугль?
откуда ты взял про своего провайдера?
 

khipr

Новичок
Как насчет того чтобы скачать бд с сервера на комп, на локалхосте заполнить а потом опять загрузить на сервер хостинга.?
 

AnrDaemon

Продвинутый новичок
Я думаю, что за восемь лет человек решил все свои проблемы.
 
Сверху