【问题标题】:Parameterized queries with RODBC使用 RODBC 的参数化查询
【发布时间】:2013-04-17 05:11:12
【问题描述】:

我在 R 中有一个变量,我想将它传递给数据库。我可以像许多人在阅读 Google 结果时建议的那样使用paste,但由于 SQL 注入漏洞,这是不安全的。我更喜欢这样的东西:

x <- 42
sqlQuery(db, 'SELECT Id, Name FROM People WHERE Age > ?;', bind=c(x))

是否可以在 RODBC 中使用参数化查询?如果没有,是否有支持它们的替代库?

我正在使用 SQL Server、RODBC 1.3-6 和 R 3.0.0。

【问题讨论】:

  • 似乎提到here 为“占位符”,但我仍然找不到如何使用它们。
  • 在粘贴之前清理字符串不会完成同样的事情吗?
  • 看看RODBCext

标签: sql r rodbc


【解决方案1】:

Mateusz Zoltak 在 2014 年编写了 RODBCext 包(基于 Brian Ripley 和 Michael Lapsley 的工作):

conn = odbcConnect('MyDataSource')

sqlPrepare(conn, "SELECT * FROM myTable WHERE column = ?")
sqlExecute(conn, 'myValue')
sqlFetchMore(conn)

来源:http://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html

【讨论】:

  • 是的 - 这是一个更好的解决方案。正确的参数化可以减少安全问题(SQL 注入),并且可以通过缓存的查询计划提高性能(仅当查询执行很多时才重要)。作为一个更好的软件工匠模式——我推荐这种解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 2010-10-13
相关资源
最近更新 更多