使用PHP将MySQL数据导出到CSV文件
我在将MySQL数据导出到CSV文件时遇到了一个小问题,它正确地从表中打印出数据,但在CSV文件的末尾,它还打印html页面代码 下面是我的代码使用PHP将MySQL数据导出到CSV文件,php,mysql,Php,Mysql,我在将MySQL数据导出到CSV文件时遇到了一个小问题,它正确地从表中打印出数据,但在CSV文件的末尾,它还打印html页面代码 下面是我的代码 $file="billing"; $i=0; $values = mysql_query("SELECT * FROM billing"); $rown=0; while( $row = mysql_fetch_assoc($values)){ if($rown++==0) $csv_ou
$file="billing";
$i=0;
$values = mysql_query("SELECT * FROM billing");
$rown=0;
while( $row = mysql_fetch_assoc($values)){
if($rown++==0)
$csv_output.=implode(";",array_keys($row))."\n";
$csv_output.=implode(";",array_values($row))."\n";
}
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: text/csv");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
}
输出:
billing_id;customer_id;user_id;trans_id;transfer;balance;created;text;credit;sender_id
257;29;;-1;0;500000;1330930434;Payment;500000;
258;29;;-1;200000;300000;1330930465;Sender ID reg.;0;jkjjhh
284;32;;-1;0;1000000;1331708884;Payment;1000000;
285;32;564;268;-120;999880;1331709106;SMS send;;
286;32;;-1;0;1000000;1331709234;Payment;120;
287;32;564;269;0;1000000;1331723634;SMS send;;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Client Manger</title>
<link rel="stylesheet" href="/style/my-style.css">
<form action='./' method='post'>
<input type="hidden" name="action" value="billing" class="text">
<input type="hidden" name="customer_id" value="" />
billing\u id;客户识别码;用户识别码;trans_id;转移平衡;创建;文本;信用发送者身份证
257;29;;-1.0;500000;1330930434;付款500000;
258;29;;-1.200000;300000;1330930465;发件人ID注册表。;0;jkjjhh
284;32;;-1.0;1000000;1331708884;付款1000000;
285;32;564;268;-120;999880;1331709106;短信发送;;
286;32;;-1.0;1000000;1331709234;付款120;
287;32;564;269;0;1000000;1331723634;短信发送;;
客户经理
原因可能是什么
谢谢大家。您需要退出
代码>或模具()代码>在打印$csv\u输出后
否则,页面的其余部分(在关闭}
(我怀疑这是if
语句的结尾)将被打印(因此将包含在CSV中)
只是想一想:最好有两个PHP文件来处理这个问题:一个输出CSV,另一个输出表单。不仅可以避免使用die/exit或非常长的else
语句,还可以使代码总体更干净
另一种想法是,你最好使用do…而任何时候你想让事情第一次发生(而且只是第一次发生)。因此,这可能是一个更好的选择:
$row = mysql_fetch_assoc($values);
$csv_output.=implode(";",array_keys($row))."\n";
do
{
// notice how there is no flag needed!
// also, you don't need to call 'array_values' when imploding
$csv_output.=implode(";",$row)."\n";
}while( $row = mysql_fetch_assoc($values));
您是否在自动创建标头的框架内运行?看起来它可能是粘贴代码之外的内容。请你过目一下,看看你是否错过了给我们的东西?