2011-05-09 89 views
1

好的,所以我有以下脚本,将使用PHP从我的数据库导出数据。 一切工作正常,除非当我尝试在Excel中打开文件,我得到“文件已损坏”。 我以前使用过这个脚本,但我不明白为什么它不起作用。这可能是一个我看不到的简单解决方案。提前致谢!SQL数据导出脚本,创建损坏的文件

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error()); 
mysql_select_db($db) or die("Can not connect."); 

$result = mysql_query("SHOW COLUMNS FROM trans",$link); 
$i = 0; 
if (mysql_num_rows($result) > 0) { 
while ($row = mysql_fetch_assoc($result)) { 
$csv_output .= $row['Field'].","; 
$i++; 
    } 
} 
$csv_output .= "\n"; 

$values = mysql_query("SELECT * FROM trans",$link); 
while ($rowr = mysql_fetch_row($values)) { 
for ($j=0;$j<$i;$j++) { 
$csv_output .= $rowr[$j].","; 
    } 
$csv_output .= "\n"; 
} 

$filename = date("Y-m-d_H-i",time()); 
header("Content-type: application/vnd.ms-excel"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header("Content-disposition: filename=".$filename.".csv"); 
print $csv_output; 

exit; 
+0

开放时的文件可以在记事本打开该文件,并显示我们的第一对夫妇,三线吗? – 2011-05-09 19:36:27

+0

试试在一个简单的文本编辑器中打开它,看看你得到了什么,nano,gedit,vim ... – Ibu 2011-05-09 19:37:00

+0

这是输出,有三行:\t \t TranID,date,cat,title,desc, 1,05-09-11,texas,lkadsjf,asldkfja; lsdk,20, 2,05-09-11,bal,laksdf,; lakjsdf,30, 3,05-09-11,Eating Out,test ,我去了温迪斯15, – Ryan 2011-05-09 19:50:16

回答

1

我认为Content-type不正确。尝试使用这个:

header("Content-type: text/csv"); 
+0

+1钉钉它,它作为一个CSV,获得不同的内容类型 – Ibu 2011-05-09 19:38:50

+0

仍然没有骰子:( – Ryan 2011-05-09 19:49:20

+0

你可以在文本编辑器中打开文件,并告诉我们前几行请 – 2011-05-09 19:53:11

0

我在这里有几点建议:

  1. 你有没有使用SELECT INTO OUTFILE考虑?如果可能的话,这可能是最好的办法。
  2. 如果您不想/不能使用SELECT INTO OUTFILE,PHP具有编写CSV输出的本机函数,可以处理诸如为您转义的内容。有关更多信息,请参阅fputcsv() manual page。用户注释中有一些示例显示如何直接输出它。
  3. 确保你选择了正确的定界符,逃生等在Excel