Ankündigung

Einklappen
Keine Ankündigung bisher.

CSV Import mit SQL vom Windows-Client

Einklappen

Neue Werbung 2019

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

  • CSV Import mit SQL vom Windows-Client

    Hallo Zusammen,

    OK, "schon wieder CSV" kann denn der nicht die SuFu oder Google benutzen

    Habe ich gemacht, komme jedoch auf keinen "grünen Zweig"

    Auch dieser Beitrag http://www.php.de/datenbanken/62748-...-moeglich.html
    hat mir nicht weitergehlofen.

    Der darin enthaltene Link auf DCLP-FAQ ist meiner Meinung nach Fehlerhaft oder ich intepretiere da was falsch.

    LOAD DATA LOCAL INFILE...... importiert doch vom Client nicht vom Server die CSV-Datei. Wie kann im Client dieser Pfad (/home/www/servers/www.servername.de/tmp/import.csv) vorhanden sein?.
    Auf dem Client muss doch ein Pfad wie "D:\Test\Test.csv" verwendet werden.

    -------------------------------------------------

    Jetzt aber zu meinem Problem:

    Client's Windows ... 2000, XP, etc
    Server Debian Linux

    Von der Applikation müssen mehrmals täglich CSV-Dateien (exports aus Excel, Calc, SAP und Prozessrecher) importiert werden.
    Diese werden vom Anwender in einem Datei-Dialog ausgewählt und dann in die entsprchende Tabelle auf den MySQL-Server importiert.

    Der Datei-Dialog gibt den Filenamen zurück der in einer Variablen hinterlegt wird:
    PHP-Code:
    $datei=$_FILES['userfile']['name']; 
    Der Dateiname enthält nur den Namen des Files ohne Pfad da das Auslesen des Pfades vom Client nicht möglich ist.
    d.h. der Anwender muss dafür sorgen, dass die CSV-Dateien immer im gleichen Verzeichnis liegen obwohl mit dem Dateidialog auch eine Datei in einem anderen Pfad ausgewählt werden kann.

    Zum Testen wird im SQL-Script der Dateiname hart Codiert.
    PHP-Code:
                $sql="LOAD DATA LOCAL INFILE 'D:/x/tst2.csv'";
                
    $sql=$sql.' REPLACE ';
                
    $sql=$sql.' INTO TABLE ';
                
    $sql=$sql.TAB_CSV_IMPORT;
                
    $sql=$sql." FIELDS TERMINATED BY ';' ";
                
    $sql=$sql." LINES TERMINATED BY '\r\n' "
    anschließend kommt:
    PHP-Code:
         echo $sql.'<BR/>';

     
    //SQL-Abfrage ausfuehren
         
    $ergebnis mysql_query ($sql);
         echo 
    'SQL Fehler : '.mysql_errno().'_**_'.mysql_error().'<BR/>'
    Es wird folgendes ausgegeben:
    LOAD DATA LOCAL INFILE 'D:/x/tst2.csv' REPLACE INTO TABLE csv FIELDS TERMINATED BY ';' LINES TERMINATED BY ' '
    SQL Fehler : 2_**_File 'D:/x/tst2.csv' not found (Errcode: 2)
    Ist eigentlich klar, da ja der / im Windows-Pfad nicht funktioniert.
    Also noch mal mit dem \

    nur die Erste Zeile des gesamten String's:
    PHP-Code:
    $sql="LOAD DATA LOCAL INFILE 'D:\\x\\tst2.csv'"
    Ausgabe:
    LOAD DATA LOCAL INFILE 'D:\x\tst2.csv' REPLACE INTO TABLE csv FIELDS TERMINATED BY ';' LINES TERMINATED BY ' '
    SQL Fehler : 2_**_File 'D st2.csv' not found (Errcode: 2)

    Ich bekomme das mit dem \ nicht hin!!

    PS: Wenn ich die Datei auf den Server lege und mit $sql="LOAD DATA INFILE '/srv/www/applikation/phpMeinTestPL/tst2.csv'" ........; importiere funktiert es einwandfrei.


    Wo ist mein Denkfehler
    Danke im Voraus für die Hilfe
    Vielen Dank im Voraus
    Peter L

  • #2
    Hi.

    Hast Du hier schon mal geschaut?

    MySQL Datenbankhandbuch: MySQL-Sprachreferenz mit vielen Beispielen: LOAD DATA INFILE

    wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Zitat von peterl Beitrag anzeigen
      LOAD DATA LOCAL INFILE...... importiert doch vom Client nicht vom Server die CSV-Datei.
      Mit Client ist der MySQL-Client, also grob gesagt das PHP-Script gemeint und nicht dein Windows-Rechner. Dein MySQL-Client und dein MySQL-Server befinden sich beide auf dem Linux-Rechner.
      Du müsstest also die CSV-Datei erst uploaden und dann auf dem Server den Temp-Pfad des Servers für den Import angeben (mit oder ohne LOCAL, sollte eigentlich beides funktionieren).

      Gegenbeispiel: Wenn du dir auf deinem Windows-Rechner den MySQL-Query-Browser installierst und von dort auf dem MySQL-Server zugreifst (falls das der Provider erlaubt), so ist dein Windows-Rechner der MySQL-Client und du müsstest dann mit der Option LOCAL den Windows-Pfad angeben.

      Knackpunkt ist also der MySQL-Client, ich hoffe, das ist rübergekommen.

      Kommentar


      • #4
        @chesssteve

        AHHHHHHHHHHHHHHH


        Danke
        Vielen Dank im Voraus
        Peter L

        Kommentar


        • #5
          Wenn du die zu importierende Datei mit einem Eingabeformular auf den Server lädtst, worauf dein Codefragment

          $datei=$_FILES['userfile']['name'];

          hindeutet, dann musst du die hochgeladene Datei noch mit

          PHP: move_uploaded_file - Manual

          in den Ordner schieben, in dem das weiterverarbeitende Script die Datei sucht.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Den Groschen habe ich bis hierher fallen gehört - schön, ist also angekommen

            Kommentar

            Lädt...
            X