2010-02-02 93 views
1

我使用R來調用一個mySQL語句,我在該語句之外定義變量,例如如何在SQL語句中使用變量名?

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

但是,這返回一個空集,我已經搜索並嘗試'。 & foo。' 「包含.foo」。 ''& & foo。「' 和許多不同的組合,但他們都沒有工作,我認爲這應該是一個MySQL問題,而不是我遇到的R特定問題,但不確定。通常變量具有$值但不在R.

+0

是不是'dbGetQuery'是R函數?它看起來像一個R問題,但你有*兩個*標籤。 – pavium 2010-02-02 07:06:35

+0

是的,你是對的,我刪除了mysql標籤。 我認爲正確的查詢是這樣的,var在最後的地方:dbGetQuery(con,「select from plate_data WHERE col ='%s'」,foo)但是這也不起作用.. – John 2010-02-02 07:21:01

回答

4

這應該工作:

foo = 23; 

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

dbGetQuery(con, sqlStatement;) 
+0

我想用 粘貼(「選擇名稱WHERE年齡=」,shQuote(foo),sep =「」) – 2010-02-02 22:00:06

+0

謝謝,這也適用於沒有''什麼是羅伯特? sqlStatement < - paste(「從姓名中選擇姓氏,年齡=」,foo,sep =「」) – John 2010-02-03 04:59:25

+0

@John。你是對的。粘貼功能已經附加「爲你,所以你不需要'''。在某些情況下,當使用「在其中的字符串時,可以使用single來包裝字符串,這在處理字符串可能嵌套很多的XML包時非常有用」。 – Robert 2010-02-03 14:18:21

0

在查詢結尾處添加分號有時會產生問題。嘗試從改變你的查詢:

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

到:

dbGetQuery(con, "select surname from names WHERE age = '.foo.'") 
+0

謝謝,但它仍然返回「0列和0行數據框」,如果我把23而不是foo它工作正常。 – John 2010-02-02 07:08:17

+0

點字符是什麼意思'.foo。'? – Sarfraz 2010-02-02 07:10:13

+0

我不知道這些點的含義是什麼,我正在嘗試使用不同格式的其他語言嘗試一些不同的東西。 – John 2010-02-02 07:15:04

0

AFAIK命令必須是一個字符串,所以你應該追加單一組件。不熟悉R我不能幫助你如何做到這一點。在MS-VBA中,字符串連接運算符是'&'。

1

接受的答案給出了不好的建議,這會讓您的應用程序容易受到SQL注入的攻擊。您應該始終使用綁定變量,而不是直接將值連接到查詢中。使用此答案中描述的dbGetPreparedQUery方法:Bind variables in R DBI