通过PHP将查询结果导出为CSV

通过PHP将查询结果导出为CSV,php,mysql,csv,export-to-excel,Php,Mysql,Csv,Export To Excel,假设我在一个名为$query的变量中存储了一个查询。我想在结果页面上创建名为“导出为CSV”的小型超链接。我该怎么做?嗯 <a href="yourexport.php" title="export as csv">Export as CSV</a> CSV=逗号分隔值=用逗号分隔值 您必须逐行回显/打印结果,以逗号(,)分隔 我假设$query是查询的结果集,它是一个关联数组: while($query = mysql_fetch_assoc($rs)) { //

假设我在一个名为$query的变量中存储了一个查询。我想在结果页面上创建名为“导出为CSV”的小型超链接。我该怎么做?

<a href="yourexport.php" title="export as csv">Export as CSV</a>

CSV=逗号分隔值=用逗号分隔值

您必须逐行回显/打印结果,以逗号(,)分隔

我假设$query是查询的结果集,它是一个关联数组:

while($query = mysql_fetch_assoc($rs)) {
  // loop till the end of records
  echo $query["field1"] . "," . $query["field2"] . "," . $query["field3"] . "\r\n";
}
其中,$rs是资源句柄

要让浏览器弹出下载框,必须在文件开头设置标题(假定文件名为export.csv):

就这样

p、 此方法不会在服务器中保留物理文件。如果要在服务器中生成文件,请使用传统的fopen和fwrite功能。

$query=“SELECT*FROM table_name”;
$query = "SELECT * FROM table_name";

$export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );

$fields = mysql_num_fields ( $export );

for ( $i = 0; $i < $fields; $i++ )
{
    $header .= mysql_field_name( $export , $i ) . "\t";
}

while( $row = mysql_fetch_row( $export ) )
{
    $line = '';
    foreach( $row as $value )
    {                                            
        if ( ( !isset( $value ) ) || ( $value == "" ) )
        {
            $value = "\t";
        }
        else
        {
            $value = str_replace( '"' , '""' , $value );
            $value = '"' . $value . '"' . "\t";
        }
        $line .= $value;
    }
    $data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );

if ( $data == "" )
{
    $data = "\n(0) Records Found!\n";                        
}

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=your_desired_name.xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";
$export=mysql\u query($query)或die(“Sql错误:”.mysql\u错误()); $fields=mysql\u num\u字段($export); 对于($i=0;$i<$fields;$i++) { $header.=mysql\u字段\u名称($export,$i)。“\t”; } while($row=mysql\u fetch\u row($export)) { $line=''; foreach(行作为$value) { 如果((!isset($value))| |($value==“”) { $value=“\t”; } 其他的 { $value=str_replace(“,“,”,$value); $value=“.”.$value.“.”“\t”; } $line.=$value; } $data.=修剪($line)。“\n”; } $data=str_replace(“\r”,”,$data); 如果($data==“”) { $data=“\n(0)找到记录!\n”; } 标题(“内容类型:应用程序/八位字节流”); 标题(“内容配置:附件;文件名=您的所需名称.xls”); 标题(“杂注:无缓存”); 标题(“到期日:0”); 打印“$header\n$data”;
ArneRie和您的答案完美结合
header("Expires: 0");
header("Cache-control: private");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=export.csv");
$query = "SELECT * FROM table_name";

$export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );

$fields = mysql_num_fields ( $export );

for ( $i = 0; $i < $fields; $i++ )
{
    $header .= mysql_field_name( $export , $i ) . "\t";
}

while( $row = mysql_fetch_row( $export ) )
{
    $line = '';
    foreach( $row as $value )
    {                                            
        if ( ( !isset( $value ) ) || ( $value == "" ) )
        {
            $value = "\t";
        }
        else
        {
            $value = str_replace( '"' , '""' , $value );
            $value = '"' . $value . '"' . "\t";
        }
        $line .= $value;
    }
    $data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );

if ( $data == "" )
{
    $data = "\n(0) Records Found!\n";                        
}

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=your_desired_name.xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";