Daten aus eine Textdatei in Datenabank schreiben
Hallo
ich habe ein Problem und zwar wenn ich via dieser Funktion
Daten aus einer Textdatei in eine Datenbank schreibe hört er nach ca. 4-5 MB auf (ich schätze Timeout).
Nun wollt eich fragen wie ich die Daten aus meinem ca. 10 MB großen Textfile in die Datenbank bekomme.
Ich hoffe ihr könnt mir helfen.
Gruß
Michi26206
ich habe ein Problem und zwar wenn ich via dieser Funktion
<?php
$lines = file('tribe.txt');
if(!is_array($lines)) die("Datei konnte nicht geöffnet werden");
foreach($lines as $line) {
list($id, $name, $ally, $villages, $points, $rank) = explode(',', $line);
$name = urldecode($name);
$name = addslashes($name);
safe_query("INSERT INTO tribe
(id, name, ally, villages, points, rank)
VALUES
('$id', '$name', '$ally', '$villages', '$points', '$rank')");
}
?>
Daten aus einer Textdatei in eine Datenbank schreibe hört er nach ca. 4-5 MB auf (ich schätze Timeout).
Nun wollt eich fragen wie ich die Daten aus meinem ca. 10 MB großen Textfile in die Datenbank bekomme.
Ich hoffe ihr könnt mir helfen.
Gruß
Michi26206
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94001
Url: https://administrator.de/contentid/94001
Ausgedruckt am: 16.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Hi,
das kann man mit LOAD DATA machen.
Du erstellst eine Kommando-Datei mit entsprechenden Anweisungen und speicherst diese
z.B. als import.sql im Binärverz. von MySQL. Ins gleiche Verzeichnis deine Textdatei.
Anschließend startest du MySQL mit dem Kommando mysql < import.sql.
Info über den Aufbau der Kommando-Datei findest
du hier --> http://dev.mysql.com/doc/refman/5.1/de/load-data.html
Gruß
Günni
das kann man mit LOAD DATA machen.
Du erstellst eine Kommando-Datei mit entsprechenden Anweisungen und speicherst diese
z.B. als import.sql im Binärverz. von MySQL. Ins gleiche Verzeichnis deine Textdatei.
Anschließend startest du MySQL mit dem Kommando mysql < import.sql.
Info über den Aufbau der Kommando-Datei findest
du hier --> http://dev.mysql.com/doc/refman/5.1/de/load-data.html
Gruß
Günni
Hi,
Zur Anleitung:
Im Idealfall brauchst du nur die Anweisungen, die nicht in eckigen Klammern stehen,
das sind nur optionale Kommandos.
Idealfall wäre z.B.:
Es liegt eine Textdatei vor, die Anzahl Spalten der Tabelle und der Textdatei
stimmen überein. Weiterhin nehmen wir an, als Trennzeichen wird in der Textdatei
das Komma verwendet.
Dann erstellst du eine Textdatei, z.B. import, mit folg. Inhalt:
Erste Zeile ist das Kommando, Daten einzulesen.
Zweite Zeile gibt den Dateinamen deiner Textdatei an und den Ort, wo
sie sich befindet. local bedeutet, dass deine Textdatei im Verzeichnis
der Datenbank abgelegt ist.
Dritte Zeile gibt den Tabellennamen an.
Vierte Zeile gibt an, durch welches Trennzeichen die Spalten in deiner
Textdatei getrennt sind.
Fünfte Zeile gibt das Zeilenende an.
Die Datei speicherst du ebenfalls im Verz. der Datenbank ab.
Zum Verzeichnis:
Irgendwo auf deinem Server/PC gibt es das Verzeichnis mysql. In diesem
werden für jede Datenbank neue Unterverzeichnisse angelegt.
Die beiden Dateien werden also entsprechend in eins dieser Unterverz.
abgespeichert.
Dann startest du auf Kommandozeilenebene mysql: mysql,
dann sieht das Eingabeprompt so aus: mysql>.
Dann wechselst du zur Datenbank mit dem Kommando \u Datenbankname.
Zum Schluß das Kommando, die Datei import auszuführen: \. import.
Dann sollte der Import ablaufen.
Gruß
Günni
Zur Anleitung:
Im Idealfall brauchst du nur die Anweisungen, die nicht in eckigen Klammern stehen,
das sind nur optionale Kommandos.
Idealfall wäre z.B.:
Es liegt eine Textdatei vor, die Anzahl Spalten der Tabelle und der Textdatei
stimmen überein. Weiterhin nehmen wir an, als Trennzeichen wird in der Textdatei
das Komma verwendet.
Dann erstellst du eine Textdatei, z.B. import, mit folg. Inhalt:
load data
local infile 'dateiname.txt'
into table tabellenname
fields terminated by ','
lines terminated by '\r\n'
Erste Zeile ist das Kommando, Daten einzulesen.
Zweite Zeile gibt den Dateinamen deiner Textdatei an und den Ort, wo
sie sich befindet. local bedeutet, dass deine Textdatei im Verzeichnis
der Datenbank abgelegt ist.
Dritte Zeile gibt den Tabellennamen an.
Vierte Zeile gibt an, durch welches Trennzeichen die Spalten in deiner
Textdatei getrennt sind.
Fünfte Zeile gibt das Zeilenende an.
Die Datei speicherst du ebenfalls im Verz. der Datenbank ab.
Zum Verzeichnis:
Irgendwo auf deinem Server/PC gibt es das Verzeichnis mysql. In diesem
werden für jede Datenbank neue Unterverzeichnisse angelegt.
Die beiden Dateien werden also entsprechend in eins dieser Unterverz.
abgespeichert.
Dann startest du auf Kommandozeilenebene mysql: mysql,
dann sieht das Eingabeprompt so aus: mysql>.
Dann wechselst du zur Datenbank mit dem Kommando \u Datenbankname.
Zum Schluß das Kommando, die Datei import auszuführen: \. import.
Dann sollte der Import ablaufen.
Gruß
Günni
Hallo Michi26206,
dein Problem kann 2 Urschen haben:
1.
Das Script erreicht den Timeout von 30 Sekunden, was aber nur auftreten kann wenn du das Script über einen Browser aufrufst. Via CLI ist nämlich kein Limit gesetzt. Lösung wäre hier den Timeout auszustellen.
2.
Dein Script bricht nach dem Einlesen der ersten 8 MB aus dem Textfile ab. Das ist nämlich das voreingestellte Spreicherlimit in deinen PHP-Einstellungen, welches ein Script nicht überschreiten darf. Das kannst du aber normalerweise auch am Anfang des Scripts umstellen. Hier ist es zum Beispiel auf 32 MB gesetzt.
Beste Grüße,
Markus
dein Problem kann 2 Urschen haben:
1.
Das Script erreicht den Timeout von 30 Sekunden, was aber nur auftreten kann wenn du das Script über einen Browser aufrufst. Via CLI ist nämlich kein Limit gesetzt. Lösung wäre hier den Timeout auszustellen.
set_time_limit(0);
2.
Dein Script bricht nach dem Einlesen der ersten 8 MB aus dem Textfile ab. Das ist nämlich das voreingestellte Spreicherlimit in deinen PHP-Einstellungen, welches ein Script nicht überschreiten darf. Das kannst du aber normalerweise auch am Anfang des Scripts umstellen. Hier ist es zum Beispiel auf 32 MB gesetzt.
ini_set(”memory_limit”,”32M”);
Beste Grüße,
Markus
Hi Michi,
in deinem Fall würde ich einfach eine SQL-File erstellen mit dem SQL-Befehlen. Am besten legst du die Textfile nach C:\ wie auch die folgende Batchdatei:
Sollte funktionieren...somit kannst du die Statements Blockweiße in phpMyAdmin kopieren und einfügen (lassen). Denn dein Hoster schriebt dir mit den 30 Sekunden auf jeden Fall ein Riegel vor!
Gruss,
Dani
in deinem Fall würde ich einfach eine SQL-File erstellen mit dem SQL-Befehlen. Am besten legst du die Textfile nach C:\ wie auch die folgende Batchdatei:
@echo off
for /f "tokens=1,2,3,4,5,6 delims=," %%a in ('type "c:\tribe.txt"') do echo INSERT INTO tribe (id, name, ally, villages, points, rank) VALUES ('%%a', '%%b', '%%c', '%%d', '%%e', '%%f'); >> "c:\sqldump.txt"
Gruss,
Dani