Mysql 如何在SQL语句中使用变量名?

Mysql 如何在SQL语句中使用变量名?,mysql,r,variables,Mysql,R,Variables,我使用R来调用一个mySQL语句,在语句外定义变量,例如 foo = 23; dbGetQuery(con, "select surname from names WHERE age = '.foo.' ;") 但这返回的是一个空集,我在谷歌上搜索并尝试了“&&foo”。“.foo”。“&&foo”。” 还有许多不同的组合,但都不起作用,我认为这应该是一个mysql问题,而不是我遇到的特定于R的问题,但不确定。通常,变量有$value,但不在R中。在查询末尾添加分号有时会产生问题。尝试从以下位

我使用R来调用一个mySQL语句,在语句外定义变量,例如

foo = 23;
dbGetQuery(con, "select surname from names WHERE age = '.foo.' ;")
但这返回的是一个空集,我在谷歌上搜索并尝试了“&&foo”。“.foo”。“&&foo”。”
还有许多不同的组合,但都不起作用,我认为这应该是一个mysql问题,而不是我遇到的特定于R的问题,但不确定。通常,变量有$value,但不在R中。

在查询末尾添加分号有时会产生问题。尝试从以下位置更改查询:

dbGetQuery(con, "select surname from names WHERE age = '.foo.' ;")
致:


AFAIK命令必须是字符串,因此您应该附加单个组件。不熟悉R我帮不了你怎么做。在MS-VBA中,字符串连接运算符为“&”。

这应该可以:

foo = 23;

sqlStatement <- paste("select surname from names WHERE age =",foo,'"',sep="")

dbGetQuery(con, sqlStatement;)
foo=23;

sqlStatement您可能希望查看此问题的答案:


最简单的解决方案是按照Robert的建议使用
粘贴
命令。

接受的答案给出了错误的建议,使应用程序容易受到SQL注入的攻击。您应该始终使用绑定变量,而不是将值直接连接到查询中。使用此答案中描述的
dbGetPreparedQUery
方法:

dbGetQuery
不是R函数吗?这看起来像一个R问题,但你有两个标签。是的,你是对的,我删除了mysql标签。我认为正确的查询是这样的,其中变量在末尾:dbGetQuery(con,“select od from plate_data,其中col='%s',foo),但这也不起作用..谢谢,但它仍然返回“0列0行的数据帧”如果我用23而不是foo,效果很好。点字符“.foo”是什么意思?我不知道点是什么意思,我尝试了一些不同于其他语言的东西,我发现使用了不同的格式。我会使用粘贴(“从名称中选择姓氏,其中age=”,shQuote(foo),sep=”)谢谢,如果没有“这些是给罗伯特的吗?”?sqlStatement@John。你说得对。粘贴函数已经附加了“for you,so you't need”“”。在某些情况下,在处理“在它们中,您可以使用single”来包装字符串的字符串时,这在处理XML包时非常有用,因为在XML包中,字符串可能有许多嵌套的”。
foo = 23;

sqlStatement <- paste("select surname from names WHERE age =",foo,'"',sep="")

dbGetQuery(con, sqlStatement;)