在CSV导出中输出列标题

时间:2015-04-21 03:55:47

标签: php mysql csv pdo

我有这个导出到csv文件的查询。它工作得很好我唯一想不通的是我需要导出列标题,并让它们显示为全名,用户名,标志和原因。下面是代码,它导出所有行,但我不确定如何将列标题导出到受尊重的行之上。

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=blackflag_bidders.csv");
header("Pragma: no-cache");
header("Expires: 0");




//SQL Query for Data
$sql = "SELECT ui.first_name, ui.last_name, u.username,
    if(u.flag=1,'BLK', if(u.flag=2,'NAA','')) flag,
    if(u.flag!=0, IFNULL(ui.note,''),'') reason
FROM user u
LEFT JOIN user_info ui ON ui.user_id=u.id
WHERE u.flag!=0;";

//Prepare Query, Bind Parameters, Excute Query
$STH = $sam_db->prepare($sql);
$STH->execute();



//Export to .CSV
$fp = fopen('php://output', 'w');
//fputcsv($fp);
while ($row = $STH->fetch(PDO::FETCH_NUM)) fputcsv($fp,$row);
fclose($fp);

3 个答案:

答案 0 :(得分:3)

一种方法是通过关联获取第一个结果,这些关联索引无论如何都是列。应用array_keys来获取这些,然后首先添加标题,然后是第一个获取的行,然后循环其余的。

// first set
$first_row = $STH->fetch(PDO::FETCH_ASSOC);
$headers = array_keys($first_row);
// $headers = array_map('ucfirst', $headers); // optional, capitalize first letter of headers
fputcsv($fp, $headers); // put the headers
fputcsv($fp, array_values($first_row)); // put the first row

while ($row = $STH->fetch(PDO::FETCH_NUM))  {
    fputcsv($fp,$row); // push the rest
}
fclose($fp);

答案 1 :(得分:0)

您只需使用HTML的<table>标记在页面中以表格形式显示结果,即可获得CSV列。

$result = "<table>";
    while ($row = $STH->fetch(PDO::FETCH_NUM)){
    $result .= "<tr><td>$row1</td><td>$row2</td><td>$row3</td></tr>";
}
$result .= "</table>";
fputcsv($fp, $result);

$row1, $row2,我的意思是您在结果集中获得的值

答案 2 :(得分:0)

答案取决于您是否已经知道列名。好像你做了(例如你已经打电话了#39;选择ui.firstname ......&#39;)

如果不这样做,可以通过查看此主题获取名称: What is the Select statement to return the column names in a table

获得名称后,只需创建一个包含名称的行,并通过修改代码将其添加到文件中:

//Export to .CSV
$columnNamesRow = "FirstName, LastName, UserName";
$fp = fopen('php://output', 'w');
fputcsv($fp, $columnNamesRow);

//fputcsv($fp);
while ($row = $STH->fetch(PDO::FETCH_NUM)) fputcsv($fp,$row);
fclose($fp);