我最近做了一个网站,并在我的sql中有一个members表。我有一个管理页面,可以下载带有列名的页面;但是我曾经使用INTO OUTFILE,但是这在我的主机上是不允许的。我想出了以下代码来下载文件:
if(file_exists('downloads/members_'.date("m-d-Y").'.csv') == true) {
header("Location: /downloads/members_".date("m-d-Y").".csv");
}
$output = fopen('downloads/members_'.date("m-d-Y").'.csv', 'w+');
fputcsv($output, array('memberID','username', 'password', 'email', 'active', 'resetToken', 'resetComplete', 'support', 'supportToken' ));
$rows = mysql_query("SELECT * FROM members;");
while ($row = mysql_fetch_assoc($rows)) fputcsv($output,$row);
header("Location: /downloads/members_".date("m-d-Y").".csv");
exit;
这只是输出列名,我以前从未使用过fputcsv,并且对我做错的事情有点困惑。我得到了要下载的文件,但其中没有表格。
[编辑]我只是使用有效的SQL查询尝试了它,所以它不起作用。上面更新的代码。成员表中也有东西。
最佳答案
尝试这个:
if (isset($_POST['download'])) {
$result = mysql_query("SELECT * FROM members", $connection);
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=yourcsv.csv');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
$csvoutput = fopen('php://output', 'w');
$row = getRow($result);
$headers = array_keys($row);//columns from db e.g, memberID','username',...
fputcsv($csvoutput, $headers);
fputcsv($csvoutput, $row);
while ($row = getRow($result)) {
fputcsv($csvoutput, $row);
}
fclose($csvoutput);
exit;
}
这是您的getRow()函数:
function getRow($res){
return mysql_fetch_assoc($res);
}
并在您的html中:
<input type="submit" name="download" value="Download CSV">
这是sqllite3数据库的实时演示。取消注释create database和insert语句,以查看有效的demo。我已经测试过,并且工作正常。我希望这能帮到您。
关于php - fputcsv不显示来自php的mysql表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36376032/