导出mysql表到CSV文件不起作用

时间:2014-03-31 08:53:00

标签: php

我在浏览器中输出了输出,而我需要将其下载为CSV文件。 以下是我的代码

$output        = "";
$table         = ""; // Enter Your Table Name 
$sql           = mysql_query("select * from $table");
$columns_total = mysql_num_fields($sql);

while ($row = mysql_fetch_array($sql)) {
  for ($i = 1; $i < $columns_total-1; $i++) {
    $output .='"'.$row["$i"].'",';
  }
  $output .="\n";
}

//下载文件

$filename = "myFile.csv";
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
echo $output;
exit;

3 个答案:

答案 0 :(得分:1)

为什么要手动生成CSV文件?有一个内置的功能; fputcsv

<?php

// generate csv
$table = 'my_table';
$output_file = 'file.csv';
$delimiter = ',';
$enclosure = '"';
$h = fopen($output_file, 'w');
$sql = mysql_query("select * from $table");
while ($row = mysql_fetch_assoc($sql)) {
    fputcsv($h, $row, $delimiter, $enclosure);
}
fclose($h);

// force download csv
header("Content-type: application/force-download"); 
header('Content-Disposition: inline; filename="'. $output_file .'"'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ". filesize($output_file)); 
header('Content-Type: application/excel'); 
header('Content-Disposition: attachment; filename="'. $output_file .'"');

?>

P.S。如果您需要将csv中的表列作为标题,则可以在生成csv文件时执行此操作:

// generate csv
$table = 'my_table';
$output_file = 'file.csv';
$delimiter = ',';
$enclosure = '"';
$h = fopen($output_file, 'w');
$sql = mysql_query("select * from $table");
$header_written = false;
while ($row = mysql_fetch_assoc($sql))
{
    if (!$header_written) {
        fputcsv($h, array_keys($row), $delimiter, $enclosure);    
        $header_written = true;
    }
    fputcsv($h, $row, $delimiter, $enclosure);
}
fclose($h);

答案 1 :(得分:0)

使用此功能

    function force_download($file)
    {
        $dir = ""; // directory path if any
        if ((isset($file))&&(file_exists($dir.$file))) 
        {
           header("Content-type: application/force-download");
           header('Content-Disposition: inline; filename="' . $dir.$file . '"');
           header("Content-Transfer-Encoding: Binary");
           header("Content-length: ".filesize($dir.$file));
           header('Content-Type: application/octet-stream');
           header('Content-Disposition: attachment; filename="' . $file . '"');
           readfile("$dir$file");
        }
    }//end function

    $filename = "myFile.csv";
    force_download($filename);

答案 2 :(得分:-1)

我也有这个问题,不管我使用的“标题”是什么组合。

我的解决方案是因为我的“download.php”文件中有一些HTML。 我想如果浏览器检测到任何HTML,它将在浏览器中显示数据,而不是初始化下载。

删除“download.php”文件中的所有HTML,只留下PHP ---它应该有效。