2013-01-24 47 views
0

我看到很多帖子的有關正確的方法來導出爲CSV,大多數的開發者推薦使用fputcsv()PHP - 出口MySQL查詢到CSV的變速

我將如何轉換下面的腳本使用fputcsv? 你會看到我也在導出標題行,它反映了表列的名稱,我想保留它。

<?php 

    $sql = "SELECT * FROM `tbl_customers`"; 
    $result = mysql_query($sql, $dbdata_conn) or die(mysql_error()); 


    $header = $csv_output = ''; 
    $fields = mysql_num_fields($result); 
    for ($i = 0; $i < $fields; $i++) { 
     $header .= mysql_field_name($result, $i) . ","; 
    } 
    $header .= "\n"; 

    while ($rowr = mysql_fetch_row($result)) { 
     for ($j=0; $j<$i; $j++) { 
     $csv_output .= $rowr[$j].", "; 
      } 
    $csv_output .= "\n"; 
    } 

    $csv_output = $header.$csv_output; 

    header("Content-type: text/x-csv"); 
    header("Content-Disposition: attachment; filename=test.csv"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    print "$csv_output"; 
    exit; 

?> 

我知道,mysql_query被棄用,因此,這是實踐的緣故。

作爲一個附註,我不熟悉fputcsv,但我在閱讀它,它對於爲csv輸出格式化數據非常有用,併爲所有轉義等節省了我們的時間。 (我也很給改進什麼上面非常開放)

+0

您不想使用[選擇到了文件?](http://dev.mysql.com/doc/refman/5.0/en/select-into.html) –

+0

您可以使用[This example](http://php.net/manual/en/function。 fputcsv.php)來做我認爲你嘗試做的事情 –

回答

1

簡單的演示(下面你mysql_*功能):

$header=array(); 
$fields = mysql_num_fields($result); 
for ($i = 0; $i < $fields; $i++) { 
    $header[] = mysql_field_name($result, $i); 
} 
header("..."); 
$f=fopen("php://output","wt"); 
fputcsv($f,$header); 
while ($row = mysql_fetch_row($result)) { 
    fputcsv($f,$row); 
} 
fclose($f); 

正如你所說,mysql_*功能被棄用,因此,你應該從事那個也是。

0

如果你想下載它作爲附件,這是確定不使用fputcsv(),但如果你想使用它,這裏是一個解決辦法:

$sql = "SELECT * FROM `tbl_customers`"; 
$result = mysql_query($sql, $dbdata_conn) or die(mysql_error()); 

$header = array(); 
$csv_output = array(); 
$fields = mysql_num_fields($result); 
for ($i = 0; $i < $fields; $i++) { 
    $header[] = mysql_field_name($result, $i); 
} 
$csv_output[] = $header; 

while ($rowr = mysql_fetch_array($result)) { 
    $csv_output[] = $rowr; 
} 

$fp = fopen('/path/to/file.csv', 'w'); 
foreach ($csv_output as $line) { 
    fputcsv($fp, $line); 
} 
fclose($fp);  

// if you pick up the file from the directory manually, the following is not needed 
header("Content-type: text/x-csv"); 
header("Content-Disposition: attachment; filename=test.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

print file_get_contents('/path/to/file.csv'); 
unlink('/path/to/file.csv'); 
exit;