2009-04-21 75 views
5

編輯:將錯誤的部分函數複製到這個問題中,下面是適當的。需要將字符串以逗號正確地導出到CSV文件中

$values = mysql_query("SELECT lname, fname, email, dtelephone, etelephone, contactwhen, thursday, 
friday, saturday, sunday, monday, comments FROM volunteers_2009 WHERE venue_id = $venue_id"); 

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

我有可能有一個逗號在它的意見,甚至是雙引號,當它在註釋字段一個逗號,它拋出了整個CSV文件。

下面的代碼是它如何將數據加載到csv字符串,以放入一個csv文件。

如何獲得它來正確地導出註釋字段數據?

回答

6

將該字段用雙引號括起來。加倍任何嵌入的雙引號。

ordinary field,"field with , in it","field with double double quote ("""")" 

注意,這是非常,非常接近問題Dealing with commas in a CSV file

+0

嗯,這一個更具體語言(我認爲這個問題的答案是用C或C++編寫的?)。 sshow提供了一個非常好的php特定的解決方案,這在其他問題中沒有給出。 – Calvin 2009-04-21 01:00:12

0

編輯:我的不好,我剛剛測試過,它不起作用 - 至少不在Excel中。

你可以然而更換別的逗號,:

$field = str_replace(',','#COMMA#',$row['Field']); 
$csv_output .= $field.', '; 
0

你可以使用一個不同的分隔符,如「|」或「@」或其他不可能出現在數據中的字符。

大多數csv軟件能夠讀取使用除逗號之外的其他內容作爲分隔符的「csv」文件。

+0

@可能不是一個好例子,因爲它會在電子郵件地址中......但這僅僅是一個例子。 – 2009-04-21 00:50:09

10

你應該看看fputcsv()。這裏也有一些有用的評論。

int fputcsv (resource $handle , array $fields [, string $delimiter = ',' 
    [, string $enclosure = '"' ]]) 

fputcsv()格式的線(通過 作爲字段陣列)爲CSV並寫入它(由一個新行終止)到 指定的文件句柄。

1

Umn,爲什麼不直接使用內置的mySQL命令?如果我錯過了什麼,請忽略,但我認爲這是最快的路線:

http://www.netreveal.com/ddalton/2006/08/how_to_export_mysql_to_csv.html

網站基本上表明:

SELECT <fields or *> INTO OUTFILE '/tmp/result.text' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM <table> WHERE <condition> 
0

它是重要的是保持逗號和雙引號數據當你輸出它?您可以隨時讀取它,然後在將數據導出到CSV之前修改數據。

我通常做的事情是用雙引號括住所有內容,並將「,」(雙引號逗號雙引號)分隔符組合在一起。這樣,如果我偶然發現雙引號或隨機逗號,這並不是什麼大問題。

相關問題