Php 从下载按钮导出.csv文件

Php 从下载按钮导出.csv文件,php,csv,pdo,export-to-excel,Php,Csv,Pdo,Export To Excel,编辑:我将“echo($row)”改为“print\r($row)”,现在正在下载的csv在括号中包含了每个数组,其中包含所有提到的数据,但是我如何自定义所有数据的打印方式呢 现在,它正在打印: 排列( [id]=>1 [名字]=>“蒂米” ) 排列( (其中每一行是excel电子表格中的下一行) 我如何进行输出,使每条记录都有自己的行?例如,excel中的第一列是id,第二列是firstname,每条记录都有自己的行 我在main.php中有一个链接: <a class="btn" h

编辑:我将“echo($row)”改为“print\r($row)”,现在正在下载的csv在括号中包含了每个数组,其中包含所有提到的数据,但是我如何自定义所有数据的打印方式呢

现在,它正在打印:

排列( [id]=>1 [名字]=>“蒂米” ) 排列(

(其中每一行是excel电子表格中的下一行)

我如何进行输出,使每条记录都有自己的行?例如,excel中的第一列是id,第二列是firstname,每条记录都有自己的行

我在main.php中有一个链接:

<a class="btn" href="export.php">Export</a>

下面是我的export.php文件:

<?php

//open database connection
try {
    $db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
                    'DBUSER',
                    'DBPASS');

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
    echo "did not connect...";
}

header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=exported-data.csv');

$sql = "SELECT * FROM table_name;";

$sth = $db->prepare($sql);
$sth->execute();

$filename = date('d.m.Y').'.csv';

$data = fopen($filename, 'w');

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    fputcsv($data, $row);
    print_r($row);
}

echo "\r\n";

fclose($data);

?>

我假设您的输出应该是一个以日期作为文件名的csv文件,对吗

你能试试这个吗

更新代码

<?php

//open database connection
try {
    $db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
                    'DBUSER',
                    'DBPASS');

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
    echo "did not connect...";
}

$sql = "SELECT * FROM table_name";

$sth = $db->prepare($sql);
$sth->execute();

$filename = date('d.m.Y').'.csv';

$data = fopen($filename, 'w');

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    fputcsv($data, $row);
}

fclose($data);


?>

代码将中断,因为“.”位于错误的位置

$filename=date('d.m.Y')..csv';
$filename='date('d.m.Y')..csv';

@NoReceipt4Panda:我不能评论,所以代码被更新了。 您应该使用
$sth=$db->prepare($sql);
而不是
$sth=$conn->prepare($sql);

您没有名为
$conn

的变量。我假设您的输出应该是一个以日期为文件名的csv文件,对吗

你能试试这个吗

更新代码

<?php

//open database connection
try {
    $db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
                    'DBUSER',
                    'DBPASS');

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
    echo "did not connect...";
}

$sql = "SELECT * FROM table_name";

$sth = $db->prepare($sql);
$sth->execute();

$filename = date('d.m.Y').'.csv';

$data = fopen($filename, 'w');

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    fputcsv($data, $row);
}

fclose($data);


?>

代码将中断,因为“.”位于错误的位置

$filename=date('d.m.Y')..csv';
$filename='date('d.m.Y')..csv';

@NoReceipt4Panda:我不能评论,所以代码被更新了。 您应该使用
$sth=$db->prepare($sql);
而不是
$sth=$conn->prepare($sql);

您没有名为
$conn

的变量,为了将关联数组正确放置到文件中,您需要解析数组,然后将行放入文件中:

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    $csv = implode(',', $row) . "\n";
    fwrite($data, $csv);
    print_r($csv);
}

为了将关联数组正确放置到文件中,您需要解析数组,然后将该行放入文件中:

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    $csv = implode(',', $row) . "\n";
    fwrite($data, $csv);
    print_r($csv);
}


您在哪里连接到数据库?错误表明您的数据库用户名/密码不正确,无法连接-此问题与CSV交付无关。此外,您不应该使用
mysql.*
函数-它们已被正式弃用。您应该转到
mysqli.*
或PDO准备的语句。@benPearlKah你能用正确的方式回复这些PDO准备的语句吗?使用PDO,@NoReceipt4Panda-PDO与
CSV
格式或Excel电子表格无关。PDO是一种与数据库通信的方式。你当前的代码不仅不完整,而且已经失效,而且 PHP。使用@JayBlanchard所说的PDO准备语句获取数据,然后使用当前代码将数据输出为
CSV
文件。简单!您在哪里连接到数据库?错误表明您的数据库用户名/密码不正确,无法连接-此问题与CSV交付无关。此外,您应该不要使用
mysql\u*
函数-它们已被正式弃用。你应该转到
mysqli\u*
或PDO准备的语句。@Benpearlkhan你能用正确的方式回复这些PDO准备的语句吗?使用PDO,@NoReceipt4Panda-PDO与
CSV
格式或Excel无关电子表格。PDO是与数据库通信的一种方式。您当前的代码不仅不完整,而且已经失效,而且
PHP
不再支持这些函数。使用@JayBlanchard所说的PDO准备语句获取数据,然后使用您当前的代码将数据输出为
CSV
文件。简单!我刚刚尝试过这个..但是它在这一行中断:$sth=$conn->prepare($sql);具体来说,错误是:“对非对象调用成员函数prepare()”该错误意味着您的查询有问题@NoReceipt4Panda@MDChaara,我只是将它改为db而不是conn,它将我重定向到URL….export.php,但没有提示和下载文件,也没有显示任何信息..我只是尝试了一下..但它在这一行中断:$sth=$conn->prepare($sql);具体来说,错误是:对非对象调用成员函数prepare()"该错误意味着您的查询有问题@NoReceipt4Panda@MDChaara,我只是将它改为db而不是conn,它将我重定向到URL….export.php,但没有提示和下载文件,也没有显示任何信息..fwrite实际上没有将任何内容放入正在下载的文件中。我只是尝试了这段代码,而不是使用mentioned在我编辑的帖子中,我下载了一个空白文件。有什么错误吗?如果我们没有写入该文件,一定有错误。我刚刚编辑了你的帖子,我把所有内容都打印到了电子表格中。嗯,这没什么意义。
print\r()
正在回显数组数据,但不应该在任何地方写入。没有print\r语句,我正在下载一张完全空白的excel表格。有了该语句,所有数据现在都以您建议的代码格式显示。fwrite实际上没有将任何内容放入正在下载的文件中。我只是尝试了这个方法de而不是我编辑的帖子中提到的内容,我下载了一个空白文件。有什么错误吗?如果我们没有写入该文件,一定有错误。我刚刚编辑了你的帖子,我把所有内容都打印到了电子表格中。嗯,这没什么意义。
print\r()
正在回显数组数据,但不应该在任何地方写入它。没有print\r语句,我正在下载一个excel工作表,其中