Php postgresql查询结果到csv打印当前页面';s的html代码也是
我正在尝试使用PHP将PostgreSQL查询的结果输出为CSV格式 主页上有一个链接,该链接将SQL语句作为字符串发送到另一个PHP类中的另一个函数,该类依次接受SQL并使用pg_query()执行查询并返回结果集 我的问题是,当我打开CSV文件时,所有查询结果都在那里,但在文件的末尾,我看到了发送查询的页面中的HTML代码 我看了几个StackOverflow的帖子,但都没用 这是我的密码: 主要类别: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
$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)函数调用后的code>。这将适用于psql
程序,但不适用于php。php中有一个CSV,但它不做CSV,所以在这个问题的上下文中没有真正的用处