将db数据转换为php中带有标题行的csv


turning db data into csv with header row in php

我有一个脚本,可以将数据库查询结果转换为csv文件。csv文件的第一行需要是查询中定义的字段名。到目前为止,我拥有的是:

$fp = fopen('report.csv', 'w');
$column_names = array();
foreach($dbh->query($base_query, PDO::FETCH_ASSOC) as $row) {
  if (empty($column_names)) {
    $column_names = array_keys($row);
    fputcsv($fp, $column_names);
  }
  // additional processing omitted ...
  fputcsv($fp, $row);
}
fclose($fp);

有没有更好的方法来填充csv第一行中的列名(去掉if条件)?也许是在循环之外做的?或者让PDO在获取数据之前输出列名?谢谢

如果将不同的操作彼此分离,总有更好的方法。

//database part
$data = $dbh->query($base_query)->fetchAll();
// header part
$fp = fopen('report.csv', 'w');
$column_names = array_keys($data[0]);
fputcsv($fp, $column_names);
// body part
foreach($data as $row) {
  // additional processing omitted ...
  fputcsv($fp, $row);
}

有没有更好的方法来填充csv第一行中的列名(去掉if条件)?

没有。

也许是在循环之外做的?

您的代码从提取的行的键推断列名,因此需要在循环中。

PDO在获取数据之前输出列名?

否则,这将需要额外的查询或存储元数据。这两者都是额外的工作