我是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();
}
答案 0 :(得分:0)
我认为这样的事情应该有效:
$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);
}