R语言调用dbGetQuery传递字符串参数报错无效标识符如何解决
R语言dbGetQuery字符串参数传递报错解决
报错原因
- 直接使用
paste拼接SQL语句时,未给字符串类型的查询值添加单引号包裹,最终生成的SQL语句为select * from games where name = cyberpunk and graphics = RTX - 数据库会将无单引号包裹的
cyberpunk、RTX识别为字段标识符,而非传入的字符串查询值,因此触发标识符无效的报错。
解决方法
方案1:使用参数化查询(优先推荐)
这是最安全的写法,既可以避免SQL注入风险,也不需要手动处理字符串转义问题,代码示例如下:
gf <- "cyberpunk" # 用?作为参数占位符 sql <- "select * from games where name = ? and graphics = ?" # 传入params参数按顺序传递占位符对应的值 yx <- dbGetQuery(ValidateUser, sql, params = list(gf, input$rat)) print(yx)
方案2:手动拼接加单引号(不推荐)
如果一定要用拼接写法,需要给字符串值外侧加单引号,同时转义值内可能存在的单引号,避免SQL语法错误:
gf <- "cyberpunk" # 用gsub转义字符串内的单引号,再用单引号包裹值 delete <- paste0("select * from games where name = '", gsub("'", "''", gf), "' and graphics = '", gsub("'", "''", input$rat), "'") yx <- dbGetQuery(ValidateUser, delete) print(yx)
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

