Microsoft SQL 服务器数据库的 RMySQL::dbEscapeStrings() 等效项
Equivalent of RMySQL::dbEscapeStrings() for a Microsoft SQL Server Database
我编写了一个 shiny
应用程序,它使用 MySQL 后端来存储不受控制的用户输入并与之交互。用户不可避免地会在自由文本中包含引号和其他特殊字符,但我发现函数 RMySQL::dbEscapeStrings()
正确处理并转义了它们。 (比自己尝试处理所有特殊情况更好的解决方案)
现在,我需要将数据库迁移到 Microsoft SQL 服务器,我决定使用 odbc
包,因为它与 pool
包兼容。 R
程序包中是否存在可以正确转义要传递给 MSSQL 数据库的字符串的现有函数?
这是我想要复制的行为示例,但使用 Microsoft SQL 服务器数据库而不是 MySQL:
library(RMySQL)
## Create a character vector with some baddies
x <- c("foo ' bar", "blah \" blah ","ugh \0 really","please \% why")
cat(paste0(x, collapse = "\n"))
# foo ' bar
# blah " blah
# ugh [=12=] really
# please \% why
conn <- RMySQL::dbConnect(RMySQL::MySQL(), dbname = "myDB", host = "127.0.0.1",
port = 3306, user = "MyUserName", password = "MyPassword")
cat(paste0(RMySQL::dbEscapeStrings(conn,x), collapse = "\n"))
# foo \' bar
# blah \" blah
# ugh \0 really
# please \% why
dbDisconnect(conn)
DBI
泛型 dbQuoteString
执行此功能,只是行为与 RMySQL::dbEscapeStrings()
略有不同。
正如预期的那样,转义序列根据数据库略有不同 -- [=14=]
对于 Microsoft SQL 服务器没有任何意义。 user-facing 的主要区别在于 dbQuoteString
将字符向量的每个元素用单引号引起来,而 RMySQL::dbEscapeStrings()
则没有。
由于 odbc
包实现了泛型,odbc::dbQuoteString
将按如下方式工作:
library(odbc)
conn <- odbc::dbConnect(drv = odbc::odbc(),.connection_string = "MyConnectionString")
x <- c("foo ' bar", "blah \" blah ","ugh \0 really","please \% why")
cat(paste0(odbc::dbQuoteString(conn,x), collapse = "\n"))
# 'foo '' bar'
# 'blah " blah '
# 'ugh [=10=] really'
# 'please \% why'
odbc::dbDisconnect(conn)
我编写了一个 shiny
应用程序,它使用 MySQL 后端来存储不受控制的用户输入并与之交互。用户不可避免地会在自由文本中包含引号和其他特殊字符,但我发现函数 RMySQL::dbEscapeStrings()
正确处理并转义了它们。 (比自己尝试处理所有特殊情况更好的解决方案)
现在,我需要将数据库迁移到 Microsoft SQL 服务器,我决定使用 odbc
包,因为它与 pool
包兼容。 R
程序包中是否存在可以正确转义要传递给 MSSQL 数据库的字符串的现有函数?
这是我想要复制的行为示例,但使用 Microsoft SQL 服务器数据库而不是 MySQL:
library(RMySQL)
## Create a character vector with some baddies
x <- c("foo ' bar", "blah \" blah ","ugh \0 really","please \% why")
cat(paste0(x, collapse = "\n"))
# foo ' bar
# blah " blah
# ugh [=12=] really
# please \% why
conn <- RMySQL::dbConnect(RMySQL::MySQL(), dbname = "myDB", host = "127.0.0.1",
port = 3306, user = "MyUserName", password = "MyPassword")
cat(paste0(RMySQL::dbEscapeStrings(conn,x), collapse = "\n"))
# foo \' bar
# blah \" blah
# ugh \0 really
# please \% why
dbDisconnect(conn)
DBI
泛型 dbQuoteString
执行此功能,只是行为与 RMySQL::dbEscapeStrings()
略有不同。
正如预期的那样,转义序列根据数据库略有不同 -- [=14=]
对于 Microsoft SQL 服务器没有任何意义。 user-facing 的主要区别在于 dbQuoteString
将字符向量的每个元素用单引号引起来,而 RMySQL::dbEscapeStrings()
则没有。
由于 odbc
包实现了泛型,odbc::dbQuoteString
将按如下方式工作:
library(odbc)
conn <- odbc::dbConnect(drv = odbc::odbc(),.connection_string = "MyConnectionString")
x <- c("foo ' bar", "blah \" blah ","ugh \0 really","please \% why")
cat(paste0(odbc::dbQuoteString(conn,x), collapse = "\n"))
# 'foo '' bar'
# 'blah " blah '
# 'ugh [=10=] really'
# 'please \% why'
odbc::dbDisconnect(conn)