在R的DBI包中,我找不到使用绑定变量的工具.我没有找到一个文件(2002年从原来的小插曲),说约绑定变量,"也许DBI可能在未来的某个时候实现这个功能",但它看起来像迄今剩下的百废待兴.
R中的人用什么代替?只是将字符串连接到SQL中?这对安全性和性能有一些明显的问题.
编辑:
以下是占位符如何工作的示例:
query <- "SELECT numlegs FROM animals WHERE color=?"
result <- dbGetQuery(caseinfo, query, bind="green")
Run Code Online (Sandbox Code Playgroud)
这不是一个很好的深思熟虑的界面,但这个想法是,你可以使用一个值bind和驱动程序处理逃脱的细节(如果底层API不处理绑定变量本身),而不必重新实现它的调用者[严重].
我在R中有一个变量,我想传递给数据库.在阅读谷歌搜索结果时,我可以使用paste许多建议,但由于SQL注入漏洞,这是不安全的.我更喜欢这样的东西:
x <- 42
sqlQuery(db, 'SELECT Id, Name FROM People WHERE Age > ?;', bind=c(x))
Run Code Online (Sandbox Code Playgroud)
是否可以使用RODBC参数化查询?如果没有,是否有支持它们的替代库?
我使用的是SQL Server,RODBC 1.3-6和R 3.0.0.
我正在编写一个R脚本来获取一些数据库数据,然后使用RODBC包来处理它.目前我所有的sqlQuery命令都是一个长字符串;
stsample<-sqlQuery(odcon, paste"select * from bob.DESIGNSAMPLE T1, bob.DESIGNSUBJECTGROUP T2, bob.DESIGNEVENT T3, bob.CONFIGSAMPLETYPES T4 WHERE T1.SUBJECTGROUPID = T2.SUBJECTGROUPID AND T1.TREATMENTEVENTID = T3.TREATMENTEVENTID AND T1.SAMPLETYPEKEY = T4.SAMPLETYPEKEY AND T1.STUDYID = T2.STUDYID AND T1.STUDYID = T3.STUDYID AND T1.STUDYID = ", chstudid, sep=""))
head(stsample)
Run Code Online (Sandbox Code Playgroud)
看起来很难看,很难阅读/更新.我已经尝试过将它们设置为多线,但是新的线条字符会受到阻碍,目前我最好的是使用大量的粘贴;
stsample<-sqlQuery(odcon,
paste(
"select ",
"* ",
"from ",
"BOB.DESIGNSAMPLE T1, ",
"BOB.DESIGNSUBJECTGROUP T2, ",
"BOB.DESIGNEVENT T3, ",
"BOB.CONFIGSAMPLETYPES T4 ",
"WHERE ",
"T1.SUBJECTGROUPID = T2.SUBJECTGROUPID ",
"AND T1.TREATMENTEVENTID = T3.TREATMENTEVENTID ",
"AND T1.SAMPLETYPEKEY = T4.SAMPLETYPEKEY ",
"AND T1.STUDYID = …Run Code Online (Sandbox Code Playgroud) 我正在使用R来调用mySQL语句,我在语句之外定义变量,例如
foo = 23;
dbGetQuery(con, "select surname from names WHERE age = '.foo.' ;")
Run Code Online (Sandbox Code Playgroud)
但这会返回一个空集,我用Google搜索并尝试'.&foo.' "包含.foo".'.&& foo."'以及许多不同的组合,但它们都不起作用,我认为这应该是一个mysql问题,而不是我遇到的R特定问题,但不确定.通常变量有$值但不在R.