【问题标题】:Export Column Names to CSV将列名导出为 CSV
【发布时间】:2014-03-03 23:14:05
【问题描述】:

我希望能够将表列的名称与查询结果一起导出到 .csv 文件中。我找到了一些使用 mysql_ 的示例,但我希望有人能在我尝试使用 PDO 时帮助我。来自 $sql 的数据导出得很好,但我无法将列名导出为第一行。

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

//Database Connection 
include"connect.php";

//Assign variables from POST
    $beer = $_POST['beer'];

//SQL Query for Data
    $sql = "SELECT * FROM brewlog WHERE Beer = :beer ORDER BY BrewDate DESC";

//Prepare Query, Bind Parameters, Excute Query
    $STH = $DBH->prepare($sql);
    $STH->bindParam(':beer', $beer);
    $STH->execute();

//Get Column Names for Header   
    $STMT = $DBH->query('SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = \'database\' AND TABLE_NAME = \'my_table\'');
    $header = $STMT->fetchAll(PDO::FETCH_NUM);

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

【问题讨论】:

  • 这与您使用的数据库连接器无关:您应该获取关联行而不是数字数组。然后你将(结果集)列名作为数组键。
  • 谢谢!我很感激。

标签: php mysql pdo export-to-csv


【解决方案1】:

您不必查询 information_schema。
只需将行作为关联数组获取并在输出数据之前输出键:

$row = $STH->fetch(PDO::FETCH_ASSOC);
if ($row) {
    fputcsv($fp,array_keys($row));
    while ($row) {
        fputcsv($fp,array_values($row));
        $row = $STH->fetch(PDO::FETCH_ASSOC);
    }
}

【讨论】:

    【解决方案2】:

    看起来问题实际上应该是“如何使用 PDO 获取表的列名数组?”正如在另一个 SO 问题中发现的那样。

    $result = $db->query('SELECT * FROM my_table LIMIT 0');
    for ($i = 0; $i < $result->columnCount(); $i++) {
        $col = $result->getColumnMeta($i);
        $columns[] = $col['name'];
    }
    

    然后做数组到CSV。

    $fp = fopen('php://output', 'w');
    fputcsv($fp, $columns);
    

    这是另一种非“实验性”的方式......

    $q = $db->prepare("DESCRIBE tablename");
    $q->execute();
    $columns = $q->fetchAll(PDO::FETCH_COLUMN);
    

    php pdo: get the columns name of a table

    【讨论】:

    • +1 我喜欢这个答案,但 FWIW getColumnMeta() 仍被列为实验性 PDO 方法。
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2021-08-16
    • 2015-11-06
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多