2015-12-10 86 views
1

導入包含單引號的csv文件時遇到問題。在我的csv文件中,有一些數據帶有單引號(撇號)。如何解決csv文件導入中的單引號錯誤?

"User's answer","answer one","answer two","answer three". 

我使用逗號(,)來分隔我csv中的列。 當我嘗試將數據導入數據庫時​​,它顯示錯誤。這是我的代碼。

while(($data=fgetcsv($handle,1000,",")) != FALSE){ 
    $id = $data[0]; 
    $name = $data[1];//User's name 
    $sql = "UPDATE my_table SET name='$name' WHERE id='$id'"; 
    mysql_db_query($dbname, $sql)or die("update error".mysql_error()); 
} 

上面的代碼顯示sql語法錯誤。如果我從csv文件中刪除單引號(')並導入,則一切正常。但某些數據將來可能包含單引號(')。所以,我想補充mysql_real_escape_string$name這樣

while(($data=fgetcsv($handle,1000,",")) != FALSE){ 
     $id = $data[0]; 
     $name = mysql_real_escape_string($data[1]);//User's name 
     $sql = "UPDATE my_table SET name='$name' WHERE id='$id'"; 
     mysql_db_query($dbname, $sql)or die("update error".mysql_error()); 
    } 

但是,將其導入到數據庫下面我展示。

'User''s answer' 

這是錯誤的,因爲我想保存就像User's answer。我不知道爲什麼它節省了很多單引號。請給我建議,我該如何解決它。

+0

看看這個:http://php.net/manual/en/function.addslashes.php –

+0

爲什麼不使用MySQL LOAD DATA? http://dev.mysql.com/doc/refman/5.7/en/load-data.html它會有點棘手,因爲你不必只導入一個CSV文件,但也更新,但它比解析通過代碼的文件 - 也,使用準備好的語句 – fthiella

+0

當我使用** addslashes **而不是** mysql_real_escape_string **時,它顯示像這樣的''用戶'的答案'相同的錯誤。謝謝。 – Cloud

回答

1

如果你已經有一個字符串,你可以創建一個包裝它,然後使用它的流see here。一個用於解析csv字符串的類。

在PHP中,還有一個函數叫做fgetcsv。但是我遇到了一些問題。

相關問題