PHP PDO stmt到CSV下载 - 行标题不起作用

时间:2016-01-14 15:46:11

标签: php pdo

嗨,如果有人能够帮助我,我发现下面的代码并修改它以满足我的需要,我试图将SELECT语句中的所有数据下载到csv文件中,列标题按列名称,但它在列标题的导出(csv文件)中抛出错误,我不确定原因。

我收到了正确的数据,但没有带回列名。

这是错误:

  

注意:未定义的索引:......中的字段

这里修改的代码没有正确的SELECTS:

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    $stmt = $dbh->prepare("SELECT * FROM users");
    $stmt->execute();
    $fields = array();
    $csv = array();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        array_push($fields, $row['Field']);
    }

    array_push($csv, $fields);
    $stmt = $dbh->prepare("SELECT * FROM users");
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
        array_push($csv, $row);
    }

    $fp = fopen('file.csv', 'w');
    foreach($csv as $row) {
        fputcsv($fp, $row);
    }

    fclose($fp);
    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=export.csv");
    header("Pragma: no-cache");
    header("Expires: 0");
    readfile('file.csv');
    $dbh = null;
} catch(PDOException $e) {
    echo $e->getMessage();
}

1 个答案:

答案 0 :(得分:2)

使用array key

获取时,您可以从$row的{​​{1}}获取列名称

我已修改您的脚本以进行演示。此外,您不需要两个SQL查询来实现所需的结果:

PDO::FETCH_ASSOC