我正在尝试使用 PHP 将 PostgreSQL 查询的结果输出为 CSV 格式。
主页上有一个链接,它将 SQL 语句作为字符串发送到另一个 PHP 类中的另一个函数,该函数又获取 SQL 并使用 pg_query() 执行查询并返回结果集。
我的问题是,当我打开 CSV 文件时,我的所有查询结果都在那里,但在文件末尾我看到了发送查询页面的 HTML 代码。
我查看了几个 StackOverflow 帖子,但无济于事。
这是我的代码:
主类:
$o .= '<p>You can convert the result set to CSV format to be opened in Excel.</p>';
$link = array('op1' => 'PatternExport', 'op2' => 'outputToCSV', 'id' => $pattern_id, 'data' => $pattern_SQL);
$o .= '<a href="' . $this->oQS->buildEncryptedURL($link) . '">Download Query Results as CSV File</a>';
接收等级:
function outputToCSV()
{
$ptid = $this->oQS->getValue('id');
$sql = $this->oQS->getValue('data');
$href = $this->oQS->buildEncryptedURL(array('op1'=>'PatternManager', 'op2'=>'listPatterns'),'/aatsc/index.php');
$result = pg_query($sql);
// filename for download
$filename = "query_results_" . date('Ymd') . "_" . $ptid . ".csv";
$output = fopen('php://temp/maxmemory:' . (12*1024*1024), 'rw+');
foreach(pg_fetch_assoc($result,0) AS $field=>$value)
{
$output .= '' . $field . ',';
}
$output = rtrim($output,',') . "\n";
for($i=0;$i<pg_num_rows($result);$i++)
{
foreach(pg_fetch_assoc($result,$i) AS $field=>$value)
$output .= '' . $value . ',';
$output = rtrim($output,',') . "\n";
}
header("Content-Type: application/vnd.ms-excel;");
header("Content-Disposition: attachment; filename=\"$filename\";");
header("Pragma: no-cache");
print($output);
//$href = $this->oQS->buildEncryptedURL(array('op1'=>'PatternManager', 'op2'=>'listPatterns'),'/aatsc/index.php');
//header("Location: $href");
}
您能否告诉我是否使用正确的方法将查询结果导出到 CSV,以及我的代码中的什么导致整个 HTML 代码被流式传输?
谢谢