You have an error in your SQL syntax...
You have an error in your SQL syntax...
am 07.01.2007 10:43:10 von wolfesberger
Hallo,
ich will eine txt.gz Datei in MySQL importieren!
Datei: http://ds10.die-staemme.de/map/village.txt.gz // Die Datei liegt
jetzt im selben Verzeichnis wie das Script!
Inhalt: $id, $name, $x, $y, $tribe, $points, $rank
[code]
error_reporting(E_ALL);
ini_set("display_errors","1");
mysql_connect("localhost", "root", "");
mysql_select_db("ds10_village");
$tab =3D "village";
$tabstruct =3D "id, name, x, y, tribe, points, rank";
$query_tpl =3D "INSERT INTO =B4.$tab.=B4 (=B4.$tabstruct.=B4) VALUES ";
$data=3Darray();
$content=3Dgzfile("village.txt.gz");
foreach ($content as $counter =3D> $line) {
$p=3Dexplode(", ",$line);
$p[1]=3D"=B4".$p[1]."=B4";
$data[]=3D"(=B4.implode(=B4,=B4,$p).=B4)";
if (($counter>0) AND ($counter % 300 == 0)) {
mysql_query($sql=3D$query_tpl.implode(=B4,=B4,$data));
print "
lightcoral=B4>".var_export($sql,true)."";
$data=3Darray();
}
}
if (count($data)>0) {
mysql_query ($sql=3D$query_tpl.implode(", ",$data)) or die
(mysql_error ());
print "Last Values:
"var_export($sql,true)."
";
}
?>
[/code]
Bei jedem Eintrag, den das Script in der Tabelle erstellen will kommt:
[b]Notice: Undefined offset: 1 in
C:\Programme\xampp\htdocs\bla\upload.php on line 15[/b] und das sind
dann ca. 20000 solche Fehlermeldungen!
Ganz am Ende kommt noch eine Fehlermeldung: [b]You have an error in
your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near '=B4.village.=B4 (=B4.id, name,
x, y, tribe, points, rank.=B4) VALUES (=B4.implode(=B4,=B4,Arra' at line
1[/b]
[b]Tabellenstruktur:[/b]
CREATE TABLE `village` (
`id` int(11) NOT NULL default =B40=B4,
`name` varchar(50) NOT NULL default ´´,
`x` smallint(6) NOT NULL default =B40=B4,
`y` smallint(6) NOT NULL default =B40=B4,
`tribe` varchar(11) NOT NULL default ´´,
`points` varchar(11) NOT NULL default ´´,
`rank` varchar(11) NOT NULL default ´´
) TYPE=3DMyISAM;
Muss man irgendeinen Zeichensatz veränder oder so etwas ähnliches?
Was sollte man hier überhaupt für einen Zeichensatz verwenden?
ich habe das ganze auf xampp laufen, mit FileZilla habe ich das ganze
upgeloadet!
woran könnte das liegen?
mfg David
Re: You have an error in your SQL syntax...
am 07.01.2007 12:04:06 von Axel Schwenke
wolfesberger@gmail.com wrote:
>
> ich will eine txt.gz Datei in MySQL importieren!
Nein. Du hast ein PHP-Skript geschrieben, das ein gziptes CSV lesen und
den Inhalt per INSERT in die Datenbank schieben soll. Allerdings wegen
Programmierfehlern scheitert.
Du bist hier offtopic. Hier ist nicht de.comp.debuggt.meine.PHP.skripte
Um hier ontopic zu sein, hättest du schon LOAD DATA INFILE benutzen
müssen. Das hätte u.U. sogar funktioniert (obwohl dein CSV merkwürdig
zu sein scheint. Strings sind nicht gequotet und nach den Kommas steht
ein Space). Aber egal, jetzt bist du hier.
> Datei: http://ds10.die-staemme.de/map/village.txt.gz // Die Datei liegt
> jetzt im selben Verzeichnis wie das Script!
Du bist sicher, daß du diese Information weltweit bekannt machen
wolltest?
>
> error_reporting(E_ALL);
> ini_set("display_errors","1");
> mysql_connect("localhost", "root", "");
Erster Fehler. Das ist ein öffentlicher Webserver und du läßt den
root Account in MySQL ohne Paßwort?
> mysql_select_db("ds10_village");
> $tab = "village";
>
> $tabstruct = "id, name, x, y, tribe, points, rank";
> $query_tpl = "INSERT INTO '.$tab.' ('.$tabstruct.') VALUES ";
Das Quoting ist total im Ar.
> $data=array();
> $content=gzfile("village.txt.gz");
> foreach ($content as $counter => $line) {
> $p=explode(", ",$line);
> $p[1]="'".$p[1]."'";
Hier ist die Zeile, wo PHP meckert. Anscheinend ist $p kein Array.
Ich halte es auch für gewagt, den gesamten File-Inhalt in ein Array
zu lesen. Schließlich hat PHP ein Memory-Limit. gzopen(), gzgets(),
gzclose() wäre besser. Außerdem suchst du mysql_real_escape_string()
> $data[]="('.implode(',',$p).')";
> if (($counter>0) AND ($counter % 300 == 0)) {
> mysql_query($sql=$query_tpl.implode(',',$data));
Einmal zuviel implode()ed. Für die paar Felder wäre sprintf() auch
eher angemessen.
> Ganz am Ende kommt noch eine Fehlermeldung: [b]You have an error in
> your SQL syntax; check the manual that corresponds to your MySQL server
> version for the right syntax to use near ''.village.' ('.id, name,
> x, y, tribe, points, rank.') VALUES ('.implode(',',Arra' at line
> 1[/b]
Sag ich doch, das Quoting ist kaputt.
> woran könnte das liegen?
Du kannst (noch) kein PHP?
XL
Re: You have an error in your SQL syntax...
am 07.01.2007 12:57:52 von wolfesberger
ja mit php kenn ich mich noch nicht so gut aus, habe es einfach mal
probiert!
Die daten liegen alle auf einen eigenen Webserver, ich habe nur den
link angegeben von wo ich diese Datei habe!
Wie müsste das Ganze deiner Meinung nach aussehen??
David
Re: You have an error in your SQL syntax...
am 07.01.2007 13:05:20 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: You have an error in your SQL syntax...
am 07.01.2007 13:12:34 von Axel Schwenke
wolfesberger@gmail.com wrote:
> ja mit php kenn ich mich noch nicht so gut aus, habe es einfach mal
> probiert!
>
> Wie müsste das Ganze deiner Meinung nach aussehen??
hier ist auch nicht de.comp.schreibt.PHP.skripte.für.mich
Ich erlaube mir, nochmal mit dem Zaunpfahl auf LOAD DATA INFILE
hinzuweisen:
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
XL