Perhatikan penggunaan garis miring maju dengan SELECT INTO OUTFILEgenap pada Windows.
Johan
1
Hai ini berfungsi dengan baik untuk format xls tetapi Jika saya mencoba menyimpan sebagai file CSV itu menunjukkan semua hasil dalam 1 kolom. Saya ingin menyimpan ini sebagai file csv.
vinod reddy
Di antara dua di atas mana yang lebih baik, lebih aman dan mengapa?
Chella
1
Saya cenderung menyarankan opsi kedua lebih aman karena `SELECT INTO OUTFILE mengharuskan pengguna mysql memiliki akses ke sistem file untuk mengubah file yang berpotensi risiko besar.
Jeepstone
91
Lihatlah pertanyaan / jawaban ini . Ini lebih ringkas daripada @ Geoff, dan juga menggunakan fungsi fputcsv bawaan.
Jika ada orang yang sebodoh saya, jangan ganti php://outputdengan nama file yang sebenarnya atau coba tutup dengan fclosedi akhir: itu bukan file asli, hanya alias untuk aliran output. Bagaimanapun jawaban ini bekerja dengan sempurna untuk saya, terima kasih Jrgns!
Untuk beberapa alasan $ fp mengembalikan false kepada saya.
Volatil3
Untuk MySQL modern, Anda dapat menggunakan: $ header [] = mysqli_fetch_field_direct ($ result, $ i) -> name;
Ben di CA
Dan ubah fungsi mysql_ lainnya menjadi fungsi mysqli_.
Ben di CA
6
Jika Anda ingin agar unduhan ditawarkan sebagai unduhan yang dapat dibuka langsung di Excel, ini dapat bekerja untuk Anda: (disalin dari proyek lama saya yang belum dirilis)
Fungsi-fungsi ini mengatur header:
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;}
Yang ini mengirimkan CSV ke aliran menggunakan hasil mysql
Terima kasih john, kode yang sangat berguna. Harus memodifikasi garis untuk fungsi csvFromResult. alih-alih while ($ row = mysql_fetch_row ($ result)) {fputcsv ($ stream, $ row); $ rows ++; }, saya harus menggunakan while ($ row = mysql_fetch_row ($ result)) {$ data [] = $ row; // fputcsv ($ stream, $ row); // $ rows ++; } foreach ($ data as $ d) {fputcsv ($ stream, $ d); }. terima kasih lagi untuk kode yang luar biasa.
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;}
Jawaban:
( dokumentasi untuk ini ada di sini: http://dev.mysql.com/doc/refman/5.0/en/select.html )
atau:
sumber
SELECT INTO OUTFILE
genap pada Windows.Lihatlah pertanyaan / jawaban ini . Ini lebih ringkas daripada @ Geoff, dan juga menggunakan fungsi fputcsv bawaan.
sumber
php://output
dengan nama file yang sebenarnya atau coba tutup denganfclose
di akhir: itu bukan file asli, hanya alias untuk aliran output. Bagaimanapun jawaban ini bekerja dengan sempurna untuk saya, terima kasih Jrgns!Lihatlah dokumentasi tentang sintaks SELECT ... INTO OUTFILE.
sumber
Pembaruan untuk @jrgns (dengan beberapa perbedaan sintaksis sedikit) solusi.
sumber
Jika Anda ingin agar unduhan ditawarkan sebagai unduhan yang dapat dibuka langsung di Excel, ini dapat bekerja untuk Anda: (disalin dari proyek lama saya yang belum dirilis)
Fungsi-fungsi ini mengatur header:
Yang ini mengirimkan CSV ke aliran menggunakan hasil mysql
Yang ini menggunakan fungsi di atas untuk menulis CSV ke file, diberikan oleh $ filename
Dan di sinilah keajaiban terjadi;)
Sebagai contoh:
sumber
sumber