2013-11-24 17 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驱动程序实现此方法

相关问题