【问题标题】:PHP export with empty content内容为空的 PHP 导出
【发布时间】:2015-04-07 09:22:31
【问题描述】:

我在这里遇到了问题。我想从 mysql 数据库中检索所有数据并将其导出。但是,导出的 csv 文件不包含任何内容。请帮帮我。

if(isset($_POST['export'])){
$filename = 'applicants '.date('m-d-Y').'.csv'; 
$tableName="applicants";
$sql=mysql_query("select * from applicants");
$num_rows=mysql_num_rows($sql);
mysql_data_seek($sql, 0);
$row = mysql_fetch_assoc($sql);
$fp = fopen($filename,"w");
$seperator="";
$comma="";
$tableName="applicants";

foreach($row as $name => $value)
{
    if($name==""){
        $name=" ";
    }
    $seperator .= $comma . '' .str_replace('','""','"'.$name.'"');
    $comma = ",";

}
$seperator .="\n";
fputs($fp,$seperator);
mysql_data_seek($sql, 0);
while($row = mysql_fetch_assoc($sql)){
    $seperator="";
    $comma="";
    foreach($row as $name => $value)
    {
        $seperator .= $comma . '' .str_replace('','""','"'.$value.'"');
        $comma = ",";   
    }
    $seperator .="\n";
    fputs($fp,$seperator);
}
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
fclose($fp);
}

【问题讨论】:

  • 每次我看到有人使用自制的 csv 导出而不是 fputcsv() 我想尖叫
  • 但是这里没有创建或执行 SQL 查询
  • 糟糕,不明白为什么有些代码丢失了。 $sql=mysql_query("从申请人中选择 *"); $num_rows=mysql_num_rows($sql); mysql_data_seek($sql, 0); $row = mysql_fetch_assoc($sql); $fp = fopen($filename,"w"); $分隔符=""; $逗号="";那是 $tableName="applicants"; 之后的代码
  • 你去。谢谢!
  • str_replace('','""','"'.$value.'"'); 认真的吗?这应该做什么? Homebrew 的问题是试图了解你在做什么

标签: php export-to-csv


【解决方案1】:

这里有一个简单的方法来做到这一点......根据你的变化进行更改

   // output headers so that the file is downloaded rather than displayed
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

// output the column headings
fputcsv($output, array('mysqlColumnName1', 'mysqlColumnName2', 'mysqlColumnName3'));

// fetch the data
mysql_connect('localhost', 'username', 'password');
mysql_select_db('database');
$rows = mysql_query('SELECT field1,field2,field3 FROM table');

// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) 
            fputcsv($output, $row);

【讨论】:

    【解决方案2】:

    仅发送Content-Disposition 标头不会自动附加文件。您应该手动包含它,例如

    // ...
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Content-Type: application/vnd.ms-excel");
    fclose($fp);
    echo file_get_contents($filename);
    

    或者,您可以使用 fopen('php://output', 'w');,正如 Harsh 的回答所建议的那样。

    另外,真的,请使用fputcsv

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2012-01-10
      • 2017-08-06
      • 2011-07-30
      相关资源
      最近更新 更多