Ankündigung

Einklappen
Keine Ankündigung bisher.

SELECT * INTO OUTFILE .... Hilfe

Einklappen

Google Responsive Ad

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

  • SELECT * INTO OUTFILE .... Hilfe

    hallo miteinander,

    [EDIT 3]
    ich haeb das Problem gelöst und auch mit in den Beitrag geschrieben. es hat sich also alles erledigt.
    [/ EDIT 3]


    ich möchte eine Abfrage aus der Datenbank direkt in eine Datei schreiben die ich dann wiederum zum Downloade anbieten kann dem User.

    Zum testen meiner SQL befehle mache ich das immer zuerst in phpMyAdmin:

    also habe ich mir den Befehl zusammen gebaut:
    Code:
    SELECT * INTO OUTFILE "test.txt" from tab_firma
    jetzt habe ich gehofft das man das irgend wie in eine Excel Tabelle bekommt, jedoch muss man da scheinbar noch was installieren, was ich nicht möchte.
    Somit habe ich mir überlegt das eine CSV Datei auch gut wäre, jedoch fehlen mir die Trennzeichen zwischen den Spalten.
    Im Netz habe ich das gefunden:
    Code:
    SELECT * INTO OUTFILE "C:\datadump\sqldbdump.txt"
    FIELDS TERMINATED BY '\t'
    LINES TERMINATED BY '\r\n'
    FROM dbo.alarms_2_2014;
    Also wollte ich das "FIELDS TERMINATED BY" übernehmen doch da bekomme ich soft eine Fehlermeldung:

    Unbekanntes Schlüsselwort (bei FIELDS)
    Unbekanntes Schlüsselwort (bei TERMINATED)
    Unbekanntes Schlüsselwort (bei BY)

    kann mir jemand hier etwas weiterhelfen?
    Was sich auch noch nicht hin bekommen habe uns nichts gefunden habe dafür ist wie ich die Spalten Bezeichnungen mit in die Datei bekommen könnte.


    Wenn das alles nicht geht müsste ich mir ein Kleines Script schreiben das mir eine CSV Datei erstellt, wäre schön wenn das über einen SQL Befehl funktionieren würde.


    gruß Mücke


    [EDIT]

    ich habe mich jetzt doch entschlossen ein kleines Script zu schreiben das mir meine abfrage in eine CSV Datei schreibt.

    Code:
    if (  isset($_SESSION['userid']) and
          isset($_POST['NL_CSV_EXPORT'])){
    
           $erg = $db->query("SELECT * FROM tab_firma
                               WHERE id_zentrale = ". $_POST['NL_CSV_EXPORT']) or die($db->error);
           if ($erg->num_rows >= 1) {
             $Export_DB_CSV = $erg->fetch_all(MYSQLI_ASSOC);
           } // $erg->num_rows
    
          if (isset($Export_DB_CSV)) {
    
             $Separator        = ";";
             $umschlossen      = '"';
             $Zeilenumbruch    = "\r\n";
             $i = 0;
    
             $datei = fopen("tmp/test_".time().".csv","a");                                      // Daei Öffnen und erstellen
    
    
             foreach($Export_DB_CSV as $ausgabe) {
    
                if ($i == 0) {
                   foreach($ausgabe as $key=>$inhalt) {
                      fwrite($datei, $umschlossen . $key . $umschlossen . $Separator);
                   }                                                                             // $ausgabe as $key=>$inhalt
                   fwrite($datei, $Zeilenumbruch);
                   foreach($ausgabe as $key=>$inhalt) {
                      fwrite($datei, $umschlossen . $inhalt . $umschlossen . $Separator);
                   }                                                                             // $ausgabe as $key=>$inhalt
                } else {
                   foreach($ausgabe as $key=>$inhalt) {
                      fwrite($datei, $umschlossen . $inhalt . $umschlossen . $Separator);
                   }                                                                             // $ausgabe as $key=>$inhalt
                }
             fwrite($datei, $Zeilenumbruch);
             $i = $i + 1;
             }                                                                                   // $Export_DB_CSV as $ausgabe
             fclose($datei);                                                                     // Datei schlißen
          }                                                                                      // isset($Export_DB_CSV)
    }                                                                                            // isset($_POST['NL_CSV_EXPORT'])
    jetzt habe ich nur noch zwei Problem.

    1) Beim Öffnen in Excel werden Sonderzeichen z.B. ß in nicht richtig angezeigt (ß).
    Die Datei wird in UTF-8 gespeichert, kann ich die auch irgend wie in das Format ANSI Konvertieren? (das habe ich manuell mit dem WIN Editor gemacht und dann wird alle richtig angezeigt in Excel)
    2) wie bekomme ich es hin das jetzt nachdem die Datei erstellt wurde sofort ein Downloade Fenster aufgeht und der User wählen kann wo er die Datei hin speichern möchte?

    [/EDIT]


    [EDIT 2]

    ich habe das mit dem Downloade hinbekommen. jedoch habe ich ein EXIT; mit einbauen müssen, was ich widerum nicht so schön finde, wenn ich das nicht habe dann bekomme ich auch meinen Gesamten Quellode in die Datei geschrieben :-( was ich nicht haben möchte

    Code:
    if (  isset($_SESSION['userid']) and
          isset($_POST['NL_CSV_EXPORT'])){
    
           $erg = $db->query("SELECT * FROM tab_firma
                               WHERE id_zentrale = ". $_POST['NL_CSV_EXPORT']) or die($db->error);
           if ($erg->num_rows >= 1) {
             $Export_DB_CSV = $erg->fetch_all(MYSQLI_ASSOC);
           } // $erg->num_rows
    
          if (isset($Export_DB_CSV)) {
    
             $Separator        = ";";
             $umschlossen      = '"';
             $Zeilenumbruch    = "\r\n";
             $i = 0;
             $filename = "tmp/test_".time().".csv";
             $datei = fopen($filename,"a");                                                      // Daei Öffnen und erstellen
    
             foreach($Export_DB_CSV as $ausgabe) {
    
                if ($i == 0) {
                   foreach($ausgabe as $key=>$inhalt) {
                      fwrite($datei, $umschlossen . $key . $umschlossen . $Separator);
                   }                                                                             // $ausgabe as $key=>$inhalt
                   fwrite($datei, $Zeilenumbruch);
                   foreach($ausgabe as $key=>$inhalt) {
                      fwrite($datei, $umschlossen . $inhalt . $umschlossen . $Separator);
                   }                                                                             // $ausgabe as $key=>$inhalt
                } else {
                   foreach($ausgabe as $key=>$inhalt) {
                      fwrite($datei, $umschlossen . $inhalt . $umschlossen . $Separator);
                   }                                                                             // $ausgabe as $key=>$inhalt
                }
             fwrite($datei, $Zeilenumbruch);
             $i = $i + 1;
             }                                                                                   // $Export_DB_CSV as $ausgabe
             fclose($datei);                                                                     // Datei schlißen
          }                                                                                      // isset($Export_DB_CSV)
    
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$filename");
    readfile( $filename ); // *downloadpopsup*      
    exit;
    }                                                                                            // isset($_POST['NL_CSV_EXPORT'])
    [/ EDIT 2]

    [EDIT 3]
    ich habe auch das Problem mit der Zeichenkette gelöst :-)
    ich Konvertiere jeden Spring vor dem Speichern in die Datei erst um, dann klappt auch die anzeige :-) in Excel :-)

    SO das ist der Code, in dem dann alles Klappt :-)

    [CODE]
    if ( isset($_SESSION['userid']) and
    isset($_POST['NL_CSV_EXPORT'])){

    $erg = $db->query("SELECT * FROM tab_firma
    WHERE id_zentrale = ". $_POST['NL_CSV_EXPORT']) or die($db->error);
    if ($erg->num_rows >= 1) {
    $Export_DB_CSV = $erg->fetch_all(MYSQLI_ASSOC);
    } // $erg->num_rows

    if (isset($Export_DB_CSV)) {

    $Separator = ";";
    $umschlossen = '"';
    $Zeilenumbruch = "\r\n";
    $i = 0;
    $filename = "tmp/test_".time().".csv";
    $datei = fopen($filename,"a"); // Daei ?ffnen und erstellen

    foreach($Export_DB_CSV as $ausgabe) {

    if ($i == 0) {
    foreach($ausgabe as $key=>$inhalt) {
    $key = iconv("UTF-8", "WINDOWS-1252", $key);
    fwrite($datei, $umschlossen . $key . $umschlossen . $Separator);
    } // $ausgabe as $key=>$inhalt
    fwrite($datei, $Zeilenumbruch);
    foreach($ausgabe as $key=>$inhalt) {
    $inhalt = iconv("UTF-8", "WINDOWS-1252", $inhalt);
    fwrite($datei, $umschlossen . $inhalt . $umschlossen . $Separator);
    } // $ausgabe as $key=>$inhalt
    } else {
    foreach($ausgabe as $key=>$inhalt) {
    $inhalt = iconv("UTF-8", "WINDOWS-1252", $inhalt);
    fwrite($datei, $umschlossen . $inhalt . $umschlossen . $Separator);
    } // $ausgabe as $key=>$inhalt
    }
    fwrite($datei, $Zeilenumbruch);
    $i = $i + 1;
    } // $Export_DB_CSV as $ausgabe
    fclose($datei); // Datei schli?en
    } // isset($Export_DB_CSV)

    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$filename");
    readfile( $filename ); // *downloadpopsup*
    exit;
    }
    [/CODE
    [ / EDIT 3]


    ps. meine SQL Abfrage ist nicht * jedoch habe ich das hier abgekürzt um platz zu sparen.


    Gruß Mücke
    Zuletzt geändert von Muecke.1982; 30.07.2017, 13:51.
Lädt...
X