将SQL表查询到csv文件并下载

时间:2013-02-01 16:58:01

标签: php sql csv pdo

我想将表查询到.csv文件并自动下载。使用适当的数据创建文件,但下载的文件显示错误的数据。

$filename = 'file.csv';
$i=0;
    try {
        $stmt = $conn->prepare("SELECT DATE, TYPE, AMOUNT, BALANCE FROM TRANSACTIONS WHERE USERNAME=? ORDER BY DATE ASC");
        $stmt->execute(array($user));
        $num_rows = $stmt->rowCount();

        $handle = fopen($filename, 'w+')  or die("can't open file");
        fputcsv($handle, array('Date','Type','Amount','Balance'));
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

            $row2[$i][0] = $row['DATE'];
            $row2[$i][1] = $row['TYPE'];
            $row2[$i][2] = $row['AMOUNT'];
            $row2[$i][3] = $row['BALANCE'];
            $i++;
            echo $i;
            fputcsv($handle, array($row['DATE'], $row['TYPE'], $row['AMOUNT'], $row['BALANCE']));
        }

        fclose($handle);
        header('Content-disposition: attachment; filename='.$filename);
        header("Content-Type: application/force-download");
        header("Content-Length: " . filesize($filename));
        header("Connection: close");
        } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage(); 
    }

这是在我的浏览器中下载文件时的样子: enter image description here

有时它看起来像这样: enter image description here

这就是它在服务器上创建时的样子: enter image description here

在服务器上创建的文件始终包含适当的结构和数据。由于某种原因,为用户下载的文件是不同的和错误的。

代码有什么问题?

1 个答案:

答案 0 :(得分:0)

我打字

$handle = fopen($filename, 'w+')  or die("can't open file");

而不是

$handle = fopen("php://output", "w");