我最近做了一个网站,并在我的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/

10-11 23:56