sqlQuery使用变量约束不起作用。

时间:2016-08-24 12:57:32

标签: r rodbc

我正在尝试使用R中的RODBC包将查询传递给Access。我可以使用sqlFetch导入整个表,但我希望使用查询来挑选数据。

但是,我想使用R变量来选择其中一个约束(Shaft_ID)。

为了构造SQL查询,我使用了Cat和Paste,因此我可以在Shaft变量周围使用引号。

我的代码如下:

    Shaft<- "S001"
BL <- sqlQuery(myDBcon, paste("SELECT * FROM BL_FGSL WHERE Shaft_ID ='",Shaft,"'"), error = TRUE, as.is = TRUE)

这会创建一个数据框,但它找不到任何值。如果我直接用“S001”替换变量就行了!

任何想法都会破裂?

1 个答案:

答案 0 :(得分:1)

SQL使用单引号字符',但在SQL注入中匹配引号可能会令人恼火,并且不强烈推荐。

我建议您参数化查询,并让计算机为您管理报价。

library(RODBC)
library(RODBCext)

Shaft<- "S001"

BL <- 
  sqlExecute(myDBcon, 
             query = "SELECT * FROM BL_FGSL WHERE Valid = TRUE AND Shaft_ID = ?", 
             data = list(Shaft_ID = Shaft),
             fetch = TRUE, 
             stringsAsFactors = FALSE,
             error = TRUE)

https://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html