我正在用R编写一个应用程序,该应用程序进行参数化查询并将其发送到数据库,以将适用的信息返回到应用程序中的数据表。由于搜索查询的性质,我需要使用SQL术语LIKE
,并在搜索词前后加上%符号。为了保护数据库免受SQL注入,我需要使用sqlInterpolate
函数。但是我在sqlInterpolate
函数进行查询的方式上遇到问题。
现在,当我进入R控制台时,此方法有效:
> sql <- sqlInterpolate(conn, "SELECT * FROM table WHERE Column1 LIKE '%000g7%'")
> dbGetQuery(conn, sql)
但这不是,
> str <- "000g7"
> sql <- sqlInterpolate(conn, "SELECT * FROM table WHERE Column1 LIKE '%?search%'", search = str)
> dbGetQuery(conn, sql)
它只是返回一个空列表。如果我可以在查询语法方面获得一些帮助,我将不胜感激。我几乎肯定,这与撇号或沿这些线的东西有关。或者,如果有更好的方法可以做到这一点,那么我就会不知所措。
答案 0 :(得分:2)
对于LIKE
运算符,%
实际上是您要搜索的字符串的一部分,因此您只需在插入值之前将其添加到要搜索的值中即可。值查询。您应该使用
str <- "000g7"
sql <- sqlInterpolate(conn, "SELECT * FROM table WHERE Column1 LIKE ?search",
search = paste0("%", str, "%"))