繁体   English   中英

PHP将带有动态列的MySQL数据导出到CSV

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM