需要将表格标题添加到导出的CSV文件中

时间:2016-02-26 18:54:48

标签: php mysql csv

我有一个脚本,它接受一个SQL语句并将查询结果放入CSV文件中。现在它只有表格的行,我希望它将表格的标题放在顶部。如何使用当前脚本执行此操作?

脚本...

<?php

include 'connect.php'; 

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename="export.csv"');
header('Cache-Control: max-age=0');

$fpcsv = fopen('php://output', "a+");

$sqlstatement = $_GET['sqlstatement'];
$exportcsv_q = mysql_query($sqlstatement);
if (@mysql_num_rows($exportcsv_q) > 0) {
    $campos = mysql_num_fields($exportcsv_q);
    while ($exportcsv_r = mysql_fetch_row($exportcsv_q)) {
         fputcsv($fpcsv, $exportcsv_r);
    }
}
exit;
?>

如果有人有mysqli版本,我很乐意将其转换过来。

1 个答案:

答案 0 :(得分:2)

首先,问题的答案:在if (@mysql_num_rows($exportcsv_q) > 0) { // output headers here fwrite($fpcsv, "header1,header2,foo,bar,..."); // <-- like this // if you want, you could do it this way: // fputcsv($fpcsv, array("header1", "header2", ...)); $campos = mysql_num_fields($exportcsv_q); while ($exportcsv_r = mysql_fetch_row($exportcsv_q)) { fputcsv($fpcsv, $exportcsv_r); } } 循环之前输出标题:

if

如果您想拥有标题,即使没有数据,也只需将该行移到mysql_*块之外。

第二,是的,你应该停止使用mysql_*; @函数已过时,deprecated且不安全。请改用MySQLiPDO。对于这里的单个问题,如何做到这一点过于宽泛。如果你对它的某些方面感到困惑,请提出一个新问题。

第三,使用try { ... } catch (...) {...}吞咽/抑制错误被视为不良做法,可能会导致意外结果。请改用"instFields": { "properties": { "_index": { "type": "object" }, "fieldValue": { "fields": { "raw": { "index": "not_analyzed", "type": "string" } }, "type": "string" }, "sourceFieldId": { "type": "integer" } }, "type": "nested" } 块,以便根据需要处理/记录/报告错误。