【发布时间】:2021-06-07 12:27:17
【问题描述】:
努力用单引号转义字符串,以便查询数据库。
以下文档中的示例让我更加困惑:
https://www.rdocumentation.org/packages/RMySQL/versions/0.10.20/topics/dbEscapeStrings
https://cran.r-project.org/web/packages/RMySQL/RMySQL.pdf
例子说明:
tmp <- sprintf("SELECT * FROM emp WHERE lname = %s", "O'Reilly")
dbEscapeStrings(con, tmp)
据我所知,这会(并且确实)生成不正确的 sql:
select * from emp where lname = O'Reilly
我尝试在 %s: 周围添加引号:
tmp <- sprintf('SELECT * FROM emp WHERE lname = "%s"', "O'Reilly")
escaped_query <- dbEscapeStrings(con, tmp)
tmp:select * from emp where lname = \"O'Reilly\"
转义查询:select * from emp where lname = \\\"O\\'Reilly\\\"
我相信我需要得到以下输出:select * from emp where lname = "O\'Reilly"
我想念什么吗?
【问题讨论】:
-
永远不要使用
sprintf来生成查询:即使是无意的sql注入也可能由于unicode或其他一些原因而发生。虽然有sqlInterpolate,但我更喜欢使用parameter binding。