lux.w: CSV-Datei mit LOAD DATA INFILE einlesen

Hi Leudde,

habe schon sämtliche Foren durchforstet, aber es funzt nicht.

Ich möchte eine CSV-Datei mit dem Befehl LOAD DATA INFILE... einlesen. Die Verbindung zur Datenbank funzt.

Der Code sieht wie folgt aus:

<?
$datei = "test.txt";
$fp = fopen("$datei", "w");
fwrite($fp, $_POST['Inhalt']); // Der Dateiinhalt wird von einem Textfeld ausgelesen und dann in die Datei eingetragen.
fclose($fp);

$sql = "LOAD DATA INFILE '$datei' INTO TABLE t_bestellung FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\' LINES TERMINATED BY '\r\n'";
$result = mysql_query($sql) or die ('Error');
echo "Bestellung(en) gespeichert!";

Immer wenn der Befehl ausgeführt werden soll, kommt die Meldung Error. Ich habe auf die DB und die Datei alle Zugriffsrechte.

Danke für Eure Hilfe.

lux.w

  1. Halihallo lux.w

    $datei = "test.txt";

    Notiz an den Leser: Datei ohne Verzeichnis. Nachher so direkt in SQL-
    Query eingefügt.

    $sql = "LOAD DATA INFILE '$datei' INTO TABLE t_bestellung FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\' LINES TERMINATED BY '\r\n'";
    $result = mysql_query($sql) or die ('Error');
    echo "Bestellung(en) gespeichert!";

    Notiz an den Autor: Bist du verrückt? - Unverifizierte Formulardaten
    gleich in die Datenbank einzulesen? - Damit kann jeder halbwegs
    Wissende die ganze Datenbank löschen. Entschuldige die harte
    Wortwahl, aber das ist wirklich sehr unklug.

    Immer wenn der Befehl ausgeführt werden soll, kommt die Meldung Error. Ich habe auf die DB und die Datei alle Zugriffsrechte.

    Wenn ein Error kommt wird er genannt! - Oder sollen wir raten?

    Also gut, ich rate mal: Wie um himmels willen soll MySQL den Pfad der
    Datei rauskriegen? - "test.txt" Dateien gibt es mehrere und MySQL
    erwartet hier schon auch einen genauen Pfad.
    http://ch2.php.net/manual/de/function.getcwd.php

    Für andere Probleme siehe:
    http://www.mysql.com/doc/en/LOAD_DATA_LOCAL.html

    Viele Grüsse

    Philipp

    1. Halihallo lux.w

      Notiz an den Autor: Bist du verrückt? - Unverifizierte Formulardaten
      gleich in die Datenbank einzulesen? - Damit kann jeder halbwegs
      Wissende die ganze Datenbank löschen. Entschuldige die harte
      Wortwahl, aber das ist wirklich sehr unklug.

      Ich ziehe diese Äusserung zurück. Es handelt sich um nicht
      auszuwertende CSV-Daten und stellen somit kein mir bekanntes Risiko
      (bis auf eventuelle Exploits in MySQL selber) dar.

      Viele Grüsse

      Philipp

    2. Hallo Philipp,

      $sql = "LOAD DATA INFILE '$datei' INTO TABLE t_bestellung FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\' LINES TERMINATED BY '\r\n'";
      $result = mysql_query($sql) or die ('Error');
      echo "Bestellung(en) gespeichert!";

      Immer wenn der Befehl ausgeführt werden soll, kommt die Meldung Error. Ich habe auf die DB und die Datei alle Zugriffsrechte.

      Wenn ein Error kommt wird er genannt! - Oder sollen wir raten?

      Mit Error meine icch das Statement bei $result = mysql_query($sql) or die('Error');

      D.H. er führt die Query nicht aus.

      Gruß lux.w

      1. Halihallo lux.w

        Wenn ein Error kommt wird er genannt! - Oder sollen wir raten?
        Mit Error meine icch das Statement bei $result = mysql_query($sql) or die('Error');
        D.H. er führt die Query nicht aus.

        Und ich meinte, dass der Fehler, wenn er passiert auch genannt werden
        soll. Verwende hierzu http://www.php.net/mysql_error um die
        genaue Fehlerursache auszugeben und zu nennen.

        Viele Grüsse

        Philipp