我正在尝试使用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作为数据库。
答案 0 :(得分:1)
您可以逐行获取并直接输出每一行,而不是先将所有结果放在一个数组中然后输出它。 这样你就不需要大量的内存来适应整个阵列了。