fputcsv没有显示来自php的mysql表

时间:2016-04-02 16:48:10

标签: php mysql

我最近创建了一个网站,并在我的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查询尝试过它并没有用。上面的更新代码。会员表中也有东西。

1 个答案:

答案 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。我已经测试过,它工作正常。我希望这会对你有所帮助。