sql data export script, creating corrupt file
Ok, so I have the following script that will export data from my database using php. Everything works fine, except when I try to open the file in exce开发者_StackOverflow社区l, I get "file is corrupt". I have used this script before, and I cannot figure out why it's not working. It may be a simple solution that I cannot see. Thanks in advance!
$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;
I think the Content-type is incorrect. Try using this instead:
header("Content-type: text/csv");
I have a few suggestions here:
- Have you considered using
SELECT INTO OUTFILE
? If possible, this is probably the best way to do it. - If you don't want to / can't use
SELECT INTO OUTFILE
, PHP has native functions for writing CSV output, that handles things like escaping for you. See the fputcsv() manual page for more info. There's some examples in the user comments showing how to output it directly. - Make sure you choose the correct delimeters, escape, etc. when opening up the file in excel
精彩评论