[英]php export mysql data with dynamic columns to csv
我是php的新手,我知道如何将带有静态列的mysql结果导出到csv,但是在某些情况下,我将必须动态导出而不指定列名。 我已经在下面尝试过了,请帮助我完成这项工作。
PHP
<?php
if(isset($_POST['action']) && $_POST['action'] == 'test_export_to_csv'){
$head_qry = mysql_query("SELECT `header_display_name` FROM expense_heading WHERE expense_id='$expense_id' order by col_order");
$columnValues = Array();
while ( $row = mysql_fetch_assoc($head_qry) ) {
$columnValues[] = $row['columnname'];
}
$filename = "uploads/reports/".$invoice_id.".csv";
$file = fopen($filename, 'w+');
fputcsv($file,$columnValues);
$data_qry="SELECT $columnValues from invoice_detail where invoice_id='$invoice_id'";
$data_result=mysql_query($data_qry);
while($result=mysql_fetch_assoc($data_result)){
$report_array=array($result[$columnValues]);
fputcsv($file, $report_array);
}
fclose($file);
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
}
我想这样的事情应该起作用:
$columnValues = Array();
while ( $row = mysql_fetch_assoc($head_qry) ) {
$columnValues[] = $row['columnname'];
}
$filename = "uploads/reports/".$invoice_id.".csv";
$file = fopen($filename, 'w+');
fputcsv($file,$columnValues);
// don't use `array_keys`
$columnValuesStr = implode(', ', $columnValues);
$data_qry = "SELECT $columnValuesStr from invoice_detail where invoice_id='$invoice_id'";
$data_result = mysql_query($data_qry);
while ($result = mysql_fetch_assoc($data_result)) {
// `$result` already an array which holds values of selected fields,
// you can pass it directly to `fputcsv`
fputcsv($file, $result);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.