使用变量RMySQL的查询

使用变量RMySQL的查询,mysql,r,Mysql,R,我尝试使用此脚本使用RMySQL在表中选择一个字段: mydb <- dbConnect(MySQL(), dbname="***", user='***',host='***') a<-29553 b<-31097 c<-'chr1' s<-'+' res<-dbSendQuery(mydb, "SELECT name FROM wgEncodeGencodeBasicV27 WHERE chrom=c AND strand=s AND txStart=a

我尝试使用此脚本使用RMySQL在表中选择一个字段:

mydb <- dbConnect(MySQL(), dbname="***", user='***',host='***')
a<-29553
b<-31097
c<-'chr1'
s<-'+'
res<-dbSendQuery(mydb, "SELECT name FROM wgEncodeGencodeBasicV27 WHERE 
chrom=c AND strand=s AND txStart=a AND txEnd=b")
但它返回错误:“where子句”中的未知列“c”。
为什么?如何更正脚本?

基本上,您可以在变量的帮助下动态准备查询。这需要单独发送变量作为参数。sprintf非常适合这个目的

以OP的案例为例。方法应为:

#Variables to be used in query
a<-29553
b<-31097
c<-'chr1'
s<-'+'

library(RMySQL)

mydb <- dbConnect(MySQL(), dbname="***", user='***',host='***')

#Prepare a query format string with place holders for variables. 
queryFormat <- "SELECT name FROM wgEncodeGencodeBasicV27 
WHERE chrom=`%s` AND strand=`%s` AND txStart=%d AND txEnd=%d"

#Use sprintf to prepare the query
query <- sprintf(queryFormat, c, s, a, b)

res<-dbSendQuery(mydb, query)

#The final query which has been send to Database:
#[1] "SELECT name FROM wgEncodeGencodeBasicV27 
# WHERE chrom=`chr1` AND strand=`+` AND txStart=29553 AND txEnd=31097"

你能澄清什么是无效的吗?您是否有错误,如果有,是什么?仅供参考,您不应该在问题中包含真实的登录信息。您的服务器可能会受到威胁。正如@Sloarthasher所说,您应该尽快更改密码。错误消息是:“where子句中的未知列“c”