2013-11-24 18 views
6

我在R中有一些字符串,應該用RODBC寫入MySQL表中。 問題是我不知道如何處理字符串中的引號以獲取沒有MySQL錯誤,但也不會弄亂文本?如何安全地轉義R中的引號以將文本提交給SQL?

我確信解決方案有點簡單,但此刻我有點陷入我自己的想法 - 我沒有跳出盒子......不逃避逃避兩次反斜槓或更好4 (或8,只是爲了保存側)

例如:

require(RODBC) 
con  <- odbcConnect("MyMySQLDatabase") 

string <- "What's up?" 
query <- "INSERT INTO table (textcolumn) VALUES" 

value <- paste0("('", string, "')") 
sql  <- paste(query, value, ";") 

res  <- sqlQuery(con, sql) 

(如何處理,我從可能的單引號和雙引號文件中讀取文本?)

回答

4

一世將通過加倍行情啓動:

string <- gsub("'","''",string) 

這將增加一倍的報價:

string 
[1] "What''s up?" 
+0

我想我不明白這一點:那會不會像更換所有單引號「bubblediboo」或一起刪除它們?我真的想保留文字原樣。 – petermeissner

+0

@marvin_dpr你只需將這行添加到你的代碼中就行了。 – agstudy

+0

我現在可以檢查代碼,它工作,但爲什麼? – petermeissner

5

如果一個人使用RMySQL由包提供的dbEscapeStrings()功能可能是最好的一段路要走。該功能負責逃避遵守MySQL設定的標準。 LINK

require(RMySQL) 
mysql <- dbDriver("MySQL") 
con  <- dbConnect(mysql, user="superuser", 
       password="totallyawesomeandsavepassword", 
       host="dbhost.hosthome.dom", 
       dbname="awesome" 
       ) 
dbEscapeStrings(con,"'''''fhf'''''''''rh'''''''''") 

# [1] "\\'\\'\\'\\'\\'fhf\\'\\'\\'\\'\\'\\'\\'\\'\\'rh\\'\\'\\'\\'\\'\\'\\'\\'\\'" 

RMySQL的手冊指出:

dbEscapeStrings目前,只有MySQL驅動程序實現此方法

相關問題