从PHP导出数据从SQL到Excel

我试图导出sql到csv与PHP,这是我设法做的。 它没有两件事情运作良好:1.在csv输出的sql数据之前,我得到当前页面的HTML代码出于某种原因。 2.如何更改表格标题行? 想要重命名csv中的表头列。

$result = $db->query("SELECT * FROM user_history WHERE member_id = '$user_id'"); $num_fields = $result->field_count; $headers = array(); $headers[] = "Number"; for($i = 0; $i < $num_fields; $i++ ) { $Obj = $result->fetch_field_direct($i); $headers[] = $Obj->name."\t"; } $current_date = date("y/m/d"); $filename = "MyFileName" . $current_date . ".csv"; $fp = fopen('php://output', 'w'); if ($fp && $result) { header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename='.$filename); header('Pragma: no-cache'); header('Expires: 0'); echo "Title of Your CSV File\n\n"; // Write mysql headers to csv fputcsv($fp, $headers); $row_tally = 0; // Write mysql rows to csv while ($row = $result->fetch_array(MYSQLI_NUM)) { $row_tally = $row_tally + 1; echo $row_tally.","; fputcsv($fp, array_values($row)); } die; } 

fetch_field_direct返回一个没有__toString()方法的对象。 根据这个你需要改变代码:

 $header .= $result->fetch_field_direct($i)."\\t"; 

至:

 $Obj = $result->fetch_field_direct($i); $header .= $Obj->name."\t"; 

其次如果你打印“\\ t”,那么你会从字面上得到\ t。 print "\t"; 会给你制表符。