Php 从下载按钮导出.csv文件
编辑:我将“echo($row)”改为“print\r($row)”,现在正在下载的csv在括号中包含了每个数组,其中包含所有提到的数据,但是我如何自定义所有数据的打印方式呢 现在,它正在打印: 排列( [id]=>1 [名字]=>“蒂米” ) 排列( (其中每一行是excel电子表格中的下一行) 我如何进行输出,使每条记录都有自己的行?例如,excel中的第一列是id,第二列是firstname,每条记录都有自己的行 我在main.php中有一个链接: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
<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是一种与数据库通信的方式。你当前的代码不仅不完整,而且已经失效,而且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工作表,其中