我遇到了一个问题。我想从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);
}
这里有一些简单的方法。。。根据您的情况进行更改
// 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);
仅发送Content-Disposition
标头不会自动附加文件。您应该手动将其包括在内,例如
// ...
header("Content-Disposition: attachment; filename='"$filename'"");
header("Content-Type: application/vnd.ms-excel");
fclose($fp);
echo file_get_contents($filename);
或者,您可以按照Harsh的回答使用fopen('php://output', 'w');
。
另外,确实要使用fputcsv
。