2013-03-10 38 views
0

在PHP中我使用的fputcsv函數產生一個逗號分隔的文件中導入一個MySQL表(使用LOAD DATA INFILE):如何使用fputcsv在csv for MySQL中獲得NULL值?

fputcsv($fcsv, array( 
    $id, 
    $name, 
    $optional 
)); 

$optional可以爲空,以便在MySQL,這應該是NULL

在MySQL文檔中,我讀到要導入NULL值,它應該在csv文件中定義爲\N

fputcsv功能放在引號內的,因此MySQL認爲它是"\N"

有沒有解決方案,或者我應該忘記使用fputcsv

+0

你試過'「\\ N」'? – MatRt 2013-03-10 03:58:26

+0

是的,沒有區別,fputcsv仍然在它周圍加雙引號 – Dylan 2013-03-11 17:52:06

回答

0

黑客攻擊的一位,但你可以很str_replace函數的「\ N」與\ n輸出:

//open temporary datastream for CSV output  
$fp = fopen("php://temp", "w"); 

//assuming $data is an array of arrays each of which is a record with \N 
//in place of nulls 
foreach($data as $line) { 
    fputcsv($fp, $line); 
} 

//read data back in to a string 
rewind($fp); 
$csv_data = fgets($fp); 

//replace "\N" with \N 
$csv_data = str_replace('"\N"', '\N', $csv_data); 

//save to file 
file_put_contents($csv_file_path, $csv_data); 

可能不是最節省內存要麼,所以要小心爲大型數據集,但應該工作...