Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL INTO OUTFILE / Backslash / replace

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL INTO OUTFILE / Backslash / replace

    Hallo,

    ich versuche über einen CommandController ein CSV-Export zu erstellen. Mein PHP-Code sieht folgendermaßen aus:

    PHP-Code:

    $mysqlCommand 
    'echo "SELECT ' implode(', '$fieldNames) . " INTO OUTFILE '" 
        
    $csvPath '\' FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\' ' 
       
    'ESCAPED BY \'' "\\\\\\\\\'" .  ' LINES TERMINATED BY \'\n\'' 'FROM ' 
       
    $tableName '" | mysql -u root -ptest db';
      
    system($mysqlCommand); 
    CSV Tabelle wird auch erstellt. Leider werden bei Textfeldern nicht gewünschte backslashes eingefügt. Hat jemand eine Idee, wie ich das richtig 'escape'? Würde mich über Hilfe freuen...

    Danke Timo

  • #2
    Hi,
    bin selber dabei eine Methode für SELECT INTO OUTFILE zu testen und SQL gehört nicht zu meinen Stärken. Versuche es trotzdem da bisher noch kein Profi geantwortet hat:
    Ist ein Backslash nicht die Defaulteinstellung für FIELDS ESCAPED BY ? Dann könntest du ESCAPED BY ja einfach weglassen.

    LG jspit

    Kommentar


    • #3
      Vorweg: Ich hab das auch noch nicht verwendet aber wäre es hier nicht weit einfacher die herdoc Syntax zu benützen, bei der Escaperei bricht man sich ja die Finger, ev. hängt ja das Problem oben auch nur damit zusammen?!

      So in etwa:

      PHP-Code:
      $afieldNames = array("Feld1""Feld2""Feld3");
      $sFieldNames implode(', '$afieldNames);
      $csvPath "/anyPath/";
      $tableName "myTable";

      $mysqlCommand = <<<EOD
      echo "SELECT $sFieldNames INTO OUTFILE $csvPath 
      FIELDS TERMINATED BY ',' 
      OPTIONALLY ENCLOSED BY '"' 
      ESCAPED BY "\" 
      LINES TERMINATED BY \n 
      FROM 
      $tableName mysql -u root -ptest db"; 
      EOD;

      echo 
      $mysqlCommand 
      LG
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Da der SQL-String mittels echo als Systemkommando ausgegeben werden soll, muß m.E. sozusagen doppelt escaped werden. Da hilft ein spezieller Debug-Trick. Zum Test das Pipe-Symbol | und alles danach aus dem $mysqlCommand entfernen und mit
        PHP-Code:
        var_dump(system($mysqlCommand)); 
        anschauen, was das (System)echo liefert.

        LG jspit

        Kommentar


        • #5
          Das (system)echo habe ich mir auch schon angeschaut. Das liefert leider das zu erwartende Ergebnis. Ich probiere das jetzt mal auf einem Live-Server. Würde mich interessieren ob sich das da auch so verhält.

          Kommentar

          Lädt...
          X