我最近创建了一个网站,并在我的sql中有一个成员表。我有一个管理页面,可以下载列名称;但是我曾经使用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查询尝试过它并没有用。上面的更新代码。会员表中也有东西。
答案 0 :(得分:1)
试试这个:
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。我已经测试过,它工作正常。我希望这会对你有所帮助。