如何安全地转义R中的引号以向SQL提交文本?

时间:2013-11-24 13:40:54

标签: mysql sql r

我在R中有一些字符串,应使用MySQL写入RODBC表。 问题是我不知道如何处理字符串中的引号以获取MySQL错误,但也不会弄乱文本?

我确信解决方案有点简单,但目前我有点陷入自己的想法 - 我没有开箱即用...逃避逃避两次反冲浪或两次反击逃避两次(或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)

(如何处理我从带有可能的单引号和双引号的文件中读取的文本?)

2 个答案:

答案 0 :(得分:7)

如果正在使用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驱动程序实现此方法

答案 1 :(得分:4)

我首先加倍引号:

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

这会使报价翻倍:

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