【问题标题】:PHP PDO stmt to CSV download - row headings not workingPHP PDO stmt 到 CSV 下载 - 行标题不起作用
【发布时间】:2016-01-14 15:46:11
【问题描述】:

您好,想知道是否有人能够帮助我,我找到了下面的代码并对其进行了修改以满足我的需要,我正在尝试将 SELECT 语句中的所有数据下载到一个 csv 文件中,其中列标题根据列名,但它在列标题的导出(csv 文件)中引发错误,我不知道为什么。

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

这是错误:

注意:未定义索引:字段在....

这里是修改后没有正确选择的代码:

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();
}

【问题讨论】:

  • 不是 100% 你在这里的意思抱歉,我已经尝试过 Field 和 field 并且都带回相同的错误

标签: php pdo


【解决方案1】:

使用PDO::FETCH_ASSOC提取时,可以从$rowarray key获取列名

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

try 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    $stmt = $dbh->prepare("SELECT * FROM cities");
    $stmt->execute();
    $fields = array();
    $csv = array();

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        if (empty($fields))
        {
            $fields = array_keys($row);
            array_push($csv, $fields);
        }

        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();
}

【讨论】:

  • 非常感谢您,它完美运行,再次感谢您
猜你喜欢
  • 1970-01-01
  • 2013-01-03
  • 2011-02-11
  • 2012-08-16
  • 1970-01-01
  • 2017-01-25
  • 2014-12-09
  • 2016-01-07
相关资源
最近更新 更多