Lesen Sie tab-getrennte text-Datei in MySQL Tabelle mit PHP
Ich versuche zu Lesen, in einer Reihe von tab-getrennte text-Dateien in bestehende MySQL-Tabellen. Der code, den ich habe, ist ganz einfach:
$lines = file("import/file_to_import.txt");
foreach ($lines as $line_num => $line) {
if($line_num > 1) {
$arr = explode("\t", $line);
$sql = sprintf("INSERT INTO my_table VALUES('%s', '%s', '%s', %s, %s);", trim((string)$arr[0]), trim((string)$arr[1]), trim((string)$arr[2]), trim((string)$arr[3]), trim((string)$arr[4]));
mysql_query($sql, $database) or die(mysql_error());
}
}
Aber egal was ich mache (also das casting vor jede variable in der sprintf-Anweisung) bekomme ich "Sie haben einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax zur Verwendung in der Nähe "in Zeile 1" Fehlermeldung.
Echo ich aus dem code, fügen Sie es in eine MySQL-editor, und es läuft wunderbar, nur es wird nicht ausgeführt von der PHP-Skript.
Was mache ich falsch??
Si
UPDATE: Hier sind die echoe würd SQL:
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A1', 'GBEN', '2.50-2.99m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A2', 'GBEN', '3.00-3.49m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A3', 'GBEN', '3.50-3.99m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A4', 'GBEN', '4.00-4.49m')
Interessant, ich habe nun schon die Schaffung der richtigen Anzahl der Zeilen in der Tabelle, aber die Werte, die eingefügt sind leer...
Könnte dies ein Codierung Problem in der Quell-text-Datei??
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht die string-Umwandlung, so werden die Daten bereits strings.
Sicherzustellen, gibt es keine Anführungszeichen in die Datei Daten. Echo aus der sql-Zeichenfolge, bevor Sie es ausführen, um zu sehen, ob da was offensichtlich falsch ist.
Ändern Sie die SQL, um:
Diese änderung enthält die Feldnamen, und zitiere die letzten zwei Werte.
Ich nicht wie Sie Methode im Allgemeinen. Vielleicht haben Sie das "erste" problem mit den fehlenden
Zeilen. Was über einige spezielle Zeichen wie '" backslash oder SQL-injection?
Ich glaube, Sie sollten prepared statements das PDO enthält, und rufen Sie die "bindValue" von
die Anweisung. Es ist eine stabile und eingebaute PHP-lib. Oder Sie verwenden können dbTube.org statt
die ist ein grafisches import-Werkzeug.
Gruß
Shutter
Vom PHP.net:
du nur vergessen, die einfachen Anführungszeichen sind wörtliche Bedeutung...was auch immer Sie es das ist, was herauskommen wird, so
\t
wäre dasselbe wiet
weil\
in diesem Fall wäre nur zu entkommen, aber wenn Sie doppelte Anführungszeichen verwenden, dann würde das funktionieren.