我有一个脚本,它接受一个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版本,我很乐意将其转换过来。
答案 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且不安全。请改用MySQLi
或PDO
。对于这里的单个问题,如何做到这一点过于宽泛。如果你对它的某些方面感到困惑,请提出一个新问题。
第三,使用try { ... } catch (...) {...}
吞咽/抑制错误被视为不良做法,可能会导致意外结果。请改用"instFields": {
"properties": {
"_index": {
"type": "object"
},
"fieldValue": {
"fields": {
"raw": {
"index": "not_analyzed",
"type": "string"
}
},
"type": "string"
},
"sourceFieldId": {
"type": "integer"
}
},
"type": "nested"
}
块,以便根据需要处理/记录/报告错误。