使用PHP将大数据导出为CSV

时间:2014-03-10 09:08:14

标签: php sql csv export-to-csv

我正在尝试使用PHP将一些数据导出为CSV。

我的代码:

function download_send_headers($filename) {
    // disable caching
    $now = gmdate("D, d M Y H:i:s");
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
    header("Last-Modified: {$now} GMT");

    // force download  
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");

    // disposition / encoding on response body
    header("Content-Disposition: attachment;filename={$filename}");
    header("Content-Transfer-Encoding: binary");
}

$givenTerm = $_POST['TextBoxList'];

$sql_query = "select * from some_table where key=".$givenTerm;
$result = sqlsrv_query($conn,$sql_query);
$r1 = array();
$file = fopen("php://output", 'w');
while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_NUMERIC)){
    $valuesArray=array();
    foreach($row as $name => $value)
    {
        $valuesArray[]=$value;
    }
    fputcsv($file,$valuesArray);
}
fclose($file);
download_send_headers("data_export_" . date("Y-m-d") . ".csv");

die();

这里我从另一个页面中的表单接收搜索值,然后根据它触发查询。该代码适用于较小的数据集(最多100个)。但是当结果中的行数更多(大约600-700)时,代码崩溃了。请告诉我如何解决这个问题。

P.S。我正在使用Sql Server 2012作为数据库。

1 个答案:

答案 0 :(得分:1)

您可以逐行获取并直接输出每一行,而不是先将所有结果放在一个数组中然后输出它。 这样你就不需要大量的内存来适应整个阵列了。