2

我有一个将数据写入 MySQL 数据库的表单。我希望用户能够CSV在最终提交后以格式下载他们的数据。

我的代码目前正在将数据库的内容转储到浏览器中,即它正在写入页面,而不是写入 csv 文件。我想将它们发送到一个链接并获得下载文件的选项。

这是我当前的代码:

$dbo = new PDO('mysql:host=localhost;dbname=db1', $username, $password);
$sql = "SELECT * FROM table1";
$qry = $dbo->prepare($sql);

// Execute the statement
$qry->execute();
var_dump($qry->fetch(PDO::FETCH_ASSOC));
$data = fopen('/tmp/db_user_export_".time().".csv', 'w');
while ($row = $qry->fetch(PDO::FETCH_ASSOC))
{
    echo "Success";
    // Export every row to a file
    fputcsv($data, $row);
}

当前结果是一个页面,其中包含表中所有数据的转储。没有在所需位置创建文件。我哪里错了?

4

1 回答 1

2

客户端不知道它是一个 CSV 文件(毕竟它只是文本!)。

尝试在任何输出之前添加它(在脚本的顶部):

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

基本上,您是在告诉客户端/浏览器您将发送 CSV 文件的数据。

那应该行得通。

您可以在此处找到有关标头的更多信息:http: //php.net/manual/en/function.header.php

于 2012-09-22T06:57:33.643 回答