Load Data Local Infile

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Load Data Local Infile

    Hi,

    ich habe folgendes Problem:
    Ich will eine csv-Datei über den Browser von meinem lokalen Rechner hochladen und diese in die mysql-Datenbank importieren. Mit dem folgenden Formular lade ich die Datei:

    PHP-Code:
    if ($_POST["sent"]!=1)
    {
    echo 
    "Personen aus csv-Datei importieren";
    echo 
    "<form name=\"form1\" method=\"post\" enctype=\"multipart/form-data\" 
                    action=\""
    .$php_self."\">";
    echo 
    "<input name=\"datei\" type=\"file\">";
    echo 
    "<input type=\"hidden\" name=\"sent\" value=\"1\">";
    echo 
    "<input type=\"submit\" name=\"Submit\" value=\"Speichern\">";

    Der Import-Versuch erfolgte mit diesem Code:

    if ($_POST["sent"]==1)
    {
    $datei=$_FILES["datei"]["tmp_name"];
    echo $datei;
    copy($datei,"test.csv"); //funktioniert

    //$datei="D:\\\\XAMPP1.5.0\\\\xampp\\\\tmp\\\\telefon.csv"; //funktioniert

    $sql1 = 'LOAD DATA LOCAL INFILE \'D:\\\\XAMPP1.5.0\\\\xampp\\\\tmp\\\\telefon.csv\'
    INTO TABLE `user` FIELDS TERMINATED BY \';\' ENCLOSED BY \'"\'
    ESCAPED BY \'\\\\\' LINES TERMINATED BY \'\\r\\n\'';//funktioniert

    $sql = "LOAD DATA LOCAL INFILE '$datei'
    INTO TABLE `user` FIELDS TERMINATED BY ',' ESCAPED BY '\\\\' ENCLOSED BY '\"'
    LINES TERMINATED BY '\r\n'";

    $eintrag=mysql_query($sql);
    echo "Datei wurde importiert";
    }
    Sorry für die Darstellung als Zitat, aber die Ansicht als php-Code verschluckt einige \. Und das ist wohl auch genau mein Problem.
    Zur Erklärung: Der Upload der Datei funktioniert einwandfrei. Das sql1-Statement funktioniert auch einwandfrei. Das gleiche gilt für das sql-Statement, wenn ich den auskommentierten Teil "$datei" wieder aktiviere. Aber es geht absolut nicht, wenn ich mit $datei den String aus $_FILES übergebe, also so, wie es jetzt dort steht. Ich bekomme keine Fehlermeldung, aber die Daten werden nicht in die DB eingefügt. Was mache ich falsch? Danke für die Hilfe!

    Als Umgebung nutze ich XAMPP auf einem "Server" im LAN.

    Gruß,
    Christian
    Gruß,
    Christian

  • #2
    Dann mach nach dem Upload der Datei noch DAS hier.
    gruss Chris

    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

    Kommentar


    • #3
      Hi,

      Original geschrieben von hhcm
      Dann mach nach dem Upload der Datei noch DAS hier.
      Wieso muss ich die temporäre Datei verschieben? Und wohin?

      Gruß,
      Christian
      Gruß,
      Christian

      Kommentar


      • #4
        dahin schieben, wo mysql auch seine Daten hält, sonst funz IMHO nicht mit dem load data

        Kommentar


        • #5
          Hi,

          ich habe die Datei jetzt in den tmp-Ordner kopiert. Folgender Code:

          if ($_POST["sent"]==1)
          {
          $datei=$_FILES["datei"]["tmp_name"];
          echo $_FILES["datei"]["type"]; //application/vnd.ms-excel
          copy($datei,"D:\\\\XAMPP1.5.0\\\\xampp\\\\tmp\\\\update.csv");

          $datei="D:\\\\XAMPP1.5.0\\\\xampp\\\\tmp\\\\update.csv";

          $sql = "LOAD DATA LOCAL INFILE '$datei'
          INTO TABLE `user` FIELDS TERMINATED BY ',' ESCAPED BY '\\\\' ENCLOSED BY '\"'
          LINES TERMINATED BY '\r\n'";

          $eintrag=mysql_query($sql);
          echo "Datei wurde importiert";
          }
          Die Datei kommt vollständig im angegebenen Ordner an, egal ob ich kopiere oder verschiebe. Allerdings wird jetzt nur die Anzahl der Datensätze in die tab eingetragen, d.h. in der tab stehen 43 Datensätze nur mit Standard-Werten. Wenn ich die Datei update.csv über phpmyadmin einfüge, funktioniert es tadellos!
          Gruß,
          Christian

          Kommentar


          • #6
            Original geschrieben von christian24

            ich habe die Datei jetzt in den tmp-Ordner kopiert.
            wenn du schwerhörig bist, kann dir auch keiner helfen

            Kommentar


            • #7
              Hi,

              Original geschrieben von asp2php
              wenn du schwerhörig bist, kann dir auch keiner helfen
              Wo hält denn mysql seine Daten? Ich habe die Datei jetzt unter xampp\mysql\data\ und unter xampp\mysql\data\userverwaltung\ abgelegt und erhalte das gleiche Ergebnis (eine bis auf die Anzahl der Datensätze leere Tabelle).

              Wenn ich die Datei mit phpmyadmin einfüge, sagt mir der SQL-Befehl auch, dass die Datei aus dem tmp-Verzeichnis geholt wird!?

              LOAD DATA LOCAL INFILE 'D:\\XAMPP1.5.0\\xampp\\tmp\\php36.tmp' INTO TABLE `user` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'
              Ich verstehe es nicht!
              Gruß,
              Christian

              Kommentar


              • #8
                Also ich für meinen teil sehe move_uploaded_file immer noch nicht.
                gruss Chris

                [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                Kommentar


                • #9
                  Hi,

                  Original geschrieben von hhcm
                  Also ich für meinen teil sehe move_uploaded_file immer noch nicht.
                  ich hatte das wechelweise drin. Sieht nun so aus:

                  if ($_POST["sent"]==1)
                  {
                  $datei=$_FILES["datei"]["tmp_name"];

                  echo $_FILES["datei"]["type"]; //application/vnd.ms-excel
                  //copy($datei,"D:\\\\XAMPP1.5.0\\\\xampp\\\\mysql\\\\data\\\\update.csv");
                  move_uploaded_file($datei,"D:\\\\XAMPP1.5.0\\\\xampp\\\\mysql\\\\data\\\\userverwaltung\\\\update.cs v");

                  $datei="D:\\\\XAMPP1.5.0\\\\xampp\\\\mysql\\\\data\\\\userverwaltung\\\\update.csv"; //funktioniert

                  $sql = "LOAD DATA LOCAL INFILE '$datei'
                  INTO TABLE `user` FIELDS TERMINATED BY ',' ESCAPED BY '\\\\' ENCLOSED BY '\"'
                  LINES TERMINATED BY '\r\n'";

                  $eintrag=mysql_query($sql);
                  echo "Datei wurde importiert";
                  }
                  Gruß,
                  Christian

                  Kommentar


                  • #10
                    Hi,

                    hm, sorry, es funktioniert jetzt. Ich habe als Trennungszeichen "," statt ";" angegeben. Deshalb waren in der Tabelle keine Inhalte. Mein Code sieht jetzt folgendermaßen aus (jetzt kann ich auch über tmp gehen):

                    if ($_POST["sent"]==1)
                    {
                    $datei=$_FILES["datei"]["tmp_name"];
                    echo $datei;echo "<br>";
                    echo $_FILES["datei"]["type"]; //application/vnd.ms-excel

                    move_uploaded_file($datei,"D:\\\\XAMPP1.5.0\\\\xampp\\\\tmp\\\\update.csv");

                    $datei="D:\\\\XAMPP1.5.0\\\\xampp\\\\tmp\\\\update.csv"; //funktioniert

                    $sql = "LOAD DATA LOCAL INFILE '$datei'
                    INTO TABLE `user` FIELDS TERMINATED BY ';' ESCAPED BY '\\\\' ENCLOSED BY '\"'
                    LINES TERMINATED BY '\r\n'";

                    $eintrag=mysql_query($sql);
                    echo "Datei wurde importiert";
                    }
                    Als Ausgabe bekomme ich dann im Browser:

                    D:\XAMPP1.5.0\xampp\tmp\php38.tmp
                    application/vnd.ms-excelDatei wurde importiert
                    Vielleicht ist mir noch folgende Frage erlaubt: Warum kann ich nicht direkt mit $_FILES["datei"]["tmp_name"] arbeiten? Muss ich immer den Umweg über den move-Befehl und den Verweis mit "\\\\" gehen? Gibt es da noch eine andere Möglichkeit?
                    Gruß,
                    Christian

                    Kommentar

                    Lädt...
                    X