php将动态列导出到csv的mysql数据

时间:2017-07-30 10:45:44

标签: php mysql

我是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();  
}

1 个答案:

答案 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);
}