2011-05-09 46 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