Php postgresql查询结果到csv打印当前页面';s的html代码也是

Php postgresql查询结果到csv打印当前页面';s的html代码也是,php,csv,Php,Csv,我正在尝试使用PHP将PostgreSQL查询的结果输出为CSV格式 主页上有一个链接,该链接将SQL语句作为字符串发送到另一个PHP类中的另一个函数,该类依次接受SQL并使用pg_query()执行查询并返回结果集 我的问题是,当我打开CSV文件时,所有查询结果都在那里,但在文件的末尾,我看到了发送查询的页面中的HTML代码 我看了几个StackOverflow的帖子,但都没用 这是我的密码: 主要类别: $o .= '<p>You can convert the result s

我正在尝试使用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>';
$o.=”您可以将结果集转换为CSV格式,以便在Excel中打开。

; $link=array('op1'=>'PatternExport','op2'=>'outputOCSV','id'=>$pattern\u id',data'=>$pattern\u SQL); $o.='';
接收班:

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");  
}
函数输出OCSV()
{ 
$ptid=$this->oQS->getValue('id');
$sql=$this->oQS->getValue('data');
$href=$this->oQS->buildEncryptedURL(数组('op1'=>'PatternManager','op2'=>'listPatterns'),'/aatsc/index.php');
$result=pg_查询($sql);
//下载文件名
$filename=“查询结果”日期('Ymd')。“$ptid.”.csv”;
$output=fopen('php://temp/maxmemory:"(12*1024*1024),"rw+",;
foreach(pg_fetch_assoc($result,0)作为$field=>$value)
{
$output.=''.$field'.'';
}
$output=rtrim($output,,')。“\n”;
对于($i=0;$i$value)
$output.=''.$value'.',';
$output=rtrim($output,,')。“\n”;
}
标题(“内容类型:application/vnd.ms excel;”);
标题(“内容处置:附件;文件名=\“$filename\”;”;
标题(“杂注:无缓存”);
打印(输出);
//$href=$this->oQS->buildEncryptedURL(数组('op1'=>'PatternManager','op2'=>'listPatterns'),'/aatsc/index.php');
//标题(“位置:$href”);
}
您能否告诉我,我是否使用正确的方法将查询结果导出到CSV,以及我的代码中的哪些内容导致整个HTML代码流化


谢谢

您只需发布以下声明:

COPY (select * from tbl) to stdout with csv header
导致:

col1,col2,col3
2013-05-22 07:28:59.732,192.168.1.67,3

您两次生成$output,如果删除foreach循环和fopen行,它应该可以工作。

那么
outputOCSV()函数调用后会发生什么?如果在那之后有html代码,它将在文件中结束。在这种情况下,插入
exit(0)。这将适用于
psql
程序,但不适用于php。php中有一个CSV,但它不做CSV,所以在这个问题的上下文中没有真正的用处