2014-09-22 28 views
2

我想用php導出sql到csv,這就是我設法做到的。它運行良好,沒有兩件事情: 1.在csv中輸出的sql數據之前,出於某種原因我得到了當前頁面的HTML代碼。 2.如何更改表格標題行?想要重命名csv中的表頭列。從SQL導出數據從PHP到Excell

$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; 
} 
+0

那麼如果你做'$ header。= $ result-> fetch_field_direct($ i)。「\ t」;會發生什麼情況?將所有'\\ n'改爲'\ n'和'「\\ t」'改爲'「\ t」'並將'「\\ r」'改爲'「\ r」' – 2014-09-22 17:55:14

+0

@ Fred-ii- Same事情。 – user3467855 2014-09-22 17:57:00

回答

1

fetch_field_direct返回一個沒有__toString()方法的對象。據this您需要更改代碼:

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

要:

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

其次,如果您打印 「\\ T」,那麼你將得到字面上\噸。 print "\t";會給你製表符。

+0

相應地改變,但現在我得到'注意:未定義的變量:標頭' – user3467855 2014-09-22 18:15:15

+0

管理通過在這段時間之前聲明標頭和數據,並出現一個帶有reports.xls的下載框來解決該問題,但內容不正確,它會打印從當前頁面的內容和查詢中的數據中刪除不可讀的樣式。它就像一個編碼屏幕 - 拍攝。 – user3467855 2014-09-22 18:26:16

+0

確保連接「\ t」和「\ n」,而不是「\\ t」和「\\ n」。 – DataHerder 2014-09-23 00:27:08