[MySQL]Zapis z CSV do MySQL

<?php

include('core.php');

$time=time();

$lines = gzfile('http://'.$CFG['tw']['server'].'/map/player.txt.gz');

if(!is_array($lines)) die("Nie można było otworzyć pliku");

foreach($lines as $line) {

	list($id, $name, $ally, $villages, $points, $rank) = explode(',', $line);

		$name = urldecode($name);

		$name = addslashes($name);

		$sql='INSERT INTO `players` (`id`, `time`, `name`, `villages`, `points`, `rank`) VALUES'." ($id, $time, $name, $villages, $points, $rank)";

		mysql_query($sql);

}

mysql_close($sql_conn);

?>

plik core.php zawiera dane konfiguracyjne w tablicy $CFG oraz łączy się i wybiera bazę. Problem jest w tym, iż dane się nie zapisują… co jest źle?

Pytanie czy w ogóle czyta plik po URLu we funkcji gzfile();

Zrób:

var_dump(gzfile('http://'.$CFG['tw']['server'].'/map/player.txt.gz'))

Druga sprawa czy nie powinno być

$sql='INSERT INTO `players` (`id`, `time`, `name`, `villages`, `points`, `rank`) VALUES'." ($id, \'$time\', \'$name\', \'$villages\', $points, $rank)";

? Tam gdzie string muszą być apostrofy. Można to sprawdzić czy się wstawia zmieniając linię na

mysql_query($sql) or die(mysql_error());

mysql_error() zwraca User ‘a4436597_itw’ has exceeded the ‘max_questions’ resource (current value: 100000) Czyli już wiem… limity :frowning:

Ale coś mi tu nie gra - 100tys. zapytań to dużo - masz duży ruch? Czy skrypt generuje tak duży ruch?

Jeśli tak to spróbuj ograniczyć ilość zapytań (połączenia, podzapytania). Wiem że to czasem nie możliwe ale to już sam musisz stwierdzić.

W csv było bardzo dużo danych, dodałem if i filtrowanie danych- działa.