PHP-Code zum Konvertieren einer MySQL-Abfrage in CSV [geschlossen]
128
Was ist der effizienteste Weg, um eine MySQL-Abfrage in PHV in PHP zu konvertieren?
Es ist am besten, temporäre Dateien zu vermeiden, da dies die Portabilität verringert (Verzeichnispfade und Festlegen von Dateisystemberechtigungen erforderlich).
Die CSV sollte auch eine oberste Zeile mit Feldnamen enthalten.
Beachten Sie die Verwendung von Schrägstrichen SELECT INTO OUTFILEauch unter Windows.
Johan
1
Hi, das funktioniert gut für das XLS-Format, aber wenn ich versuche, es als CSV-Datei zu speichern, werden alle Ergebnisse in einer Spalte angezeigt. Ich möchte dies als CSV-Datei speichern.
Vinod Reddy
Welches der beiden oben genannten ist besser, sicherer und warum?
Chella
1
Ich würde eher vorschlagen, dass die zweite Option sicherer ist, da `SELECT INTO OUTFILE erfordert, dass der MySQL-Benutzer Zugriff auf das Dateisystem hat, um Dateien zu ändern, was ein potenziell großes Risiko darstellt.
Jeepstone
91
Schauen Sie sich diese Frage / Antwort an . Es ist prägnanter als das von @ Geoff und verwendet auch die integrierte Funktion fputcsv.
Falls jemand so dumm ist wie ich, ersetzen Sie ihn nicht durch php://outputeinen tatsächlichen Dateinamen oder versuchen Sie, ihn fcloseam Ende durch einen zu schließen : Es handelt sich nicht um eine echte Datei, sondern nur um einen Alias für den Ausgabestream. Wie auch immer, diese Antwort hat perfekt für mich funktioniert, danke Jrgns!
Aus irgendeinem Grund gibt $ fp false an mich zurück.
Volatil3
Für modernes MySQL können Sie Folgendes verwenden: $ headers [] = mysqli_fetch_field_direct ($ result, $ i) -> name;
Ben in CA
Und ändern Sie die anderen mysql_-Funktionen in mysqli_-Funktionen.
Ben in CA
6
Wenn Sie möchten, dass der Download als Download angeboten wird, der direkt in Excel geöffnet werden kann, funktioniert dies möglicherweise für Sie: (kopiert von einem alten unveröffentlichten Projekt von mir)
Diese Funktionen richten die Header ein:
function setExcelContentType(){if(headers_sent())returnfalse;
header('Content-type: application/vnd.ms-excel');returntrue;}function setDownloadAsHeader($filename){if(headers_sent())returnfalse;
header('Content-disposition: attachment; filename='. $filename);returntrue;}
Dieser sendet eine CSV mit einem MySQL-Ergebnis an einen Stream
Danke John sehr nützlicher Code. Musste eine Zeile für die Funktion csvFromResult ändern. anstelle von while ($ row = mysql_fetch_row ($ result)) {fputcsv ($ stream, $ row); $ rows ++; }, ich musste while verwenden ($ row = mysql_fetch_row ($ result)) {$ data [] = $ row; // fputcsv ($ stream, $ row); // $ rows ++; } foreach ($ data als $ d) {fputcsv ($ stream, $ d); }. Nochmals vielen Dank für diesen wunderbaren Code.
Codingbbq
3
// Export to CSVif($_GET['action']=='export'){
$rsSearchResults = mysql_query($sql, $db)ordie(mysql_error());
$out ='';
$fields = mysql_list_fields('database','table',$db);
$columns = mysql_num_fields($fields);// Put the name of all fieldsfor($i =0; $i < $columns; $i++){
$l=mysql_field_name($fields, $i);
$out .='"'.$l.'",';}
$out .="\n";// Add all values in the tablewhile($l = mysql_fetch_array($rsSearchResults)){for($i =0; $i < $columns; $i++){
$out .='"'.$l["$i"].'",';}
$out .="\n";}// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");//header("Content-type: text/csv");//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=search_results.csv");
echo $out;exit;}
Antworten:
( Die Dokumentation hierzu finden Sie hier: http://dev.mysql.com/doc/refman/5.0/en/select.html )
oder:
quelle
SELECT INTO OUTFILE
auch unter Windows.Schauen Sie sich diese Frage / Antwort an . Es ist prägnanter als das von @ Geoff und verwendet auch die integrierte Funktion fputcsv.
quelle
php://output
einen tatsächlichen Dateinamen oder versuchen Sie, ihnfclose
am Ende durch einen zu schließen : Es handelt sich nicht um eine echte Datei, sondern nur um einen Alias für den Ausgabestream. Wie auch immer, diese Antwort hat perfekt für mich funktioniert, danke Jrgns!Lesen Sie die Dokumentation zur Syntax SELECT ... INTO OUTFILE.
quelle
Ein Update auf die Lösung @jrgns (mit einigen geringfügigen Syntaxunterschieden).
quelle
Wenn Sie möchten, dass der Download als Download angeboten wird, der direkt in Excel geöffnet werden kann, funktioniert dies möglicherweise für Sie: (kopiert von einem alten unveröffentlichten Projekt von mir)
Diese Funktionen richten die Header ein:
Dieser sendet eine CSV mit einem MySQL-Ergebnis an einen Stream
Dieser verwendet die obige Funktion, um eine CSV in eine Datei zu schreiben, die durch $ filename angegeben wird
Und hier passiert die Magie;)
Beispielsweise:
quelle
quelle