2010-02-02 6 views
1

J'utilise R pour appeler une instruction mySQL, où je définis la variable en dehors de l'instruction, par ex.Comment utiliser un nom de variable dans une instruction SQL?

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

Mais cela retourne un ensemble vide, j'ai googlé et essayé '. & foo. ' ".foo." "& & foo." ' et de nombreuses combinaisons différentes, mais aucun d'entre eux fonctionnent, je pense que cela devrait être une question mysql plutôt que d'un problème spécifique R que j'ai, mais pas sûr. Normalement, les variables ont des valeurs en $ mais pas en R.

+0

'dbGetQuery' n'est pas une fonction R? Cela ressemble à une question R, mais vous avez * les deux * tags. – pavium

+0

Oui, vous avez raison, je supprime l'étiquette mysql. Je pense que la requête correcte est quelque chose comme ceci, où la var va à la fin: dbGetQuery (con, "sélectionnez od from plate_data WHERE col = '% s'", foo) Mais cela ne fonctionne pas .. – John

Répondre

4

Cela devrait fonctionner:

foo = 23; 

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

dbGetQuery(con, sqlStatement;) 
+0

Je voudrais utiliser coller ("sélectionnez le nom de famille des noms WHERE age =", shQuote (foo), sep = "") –

+0

merci, cela fonctionne aussi sans les «quoi sont ceux pour Robert? sqlStatement <- paste ("sélectionnez le nom de famille parmi les noms WHERE age =", foo, sep = "") – John

+0

@John. Tu as raison. La fonction de collage ajoute déjà "pour vous donc vous n'avez pas besoin de" "'. Dans certains cas, lorsque vous travaillez avec des chaînes qui ont «en eux, vous pouvez utiliser single» pour envelopper la chaîne, ce qui est très utile lorsque vous manipulez le package XML où les chaînes peuvent être imbriquées ». – Robert

0

L'ajout du point-virgule à la fin de la requête crée parfois un problème. Essayez de changer votre requête de:

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

à:

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

Merci , mais il renvoie encore "trame de données avec 0 colonnes et 0 lignes" où comme si je mets 23 au lieu de foo cela fonctionne bien. – John

+0

que signifie le caractère point '.foo.'? – Sarfraz

+0

Je ne sais pas ce que les points signifient, j'essayais quelques choses différentes d'autres langues que j'ai trouvées en utilisant différents formats. – John

0

la commande AFAIK doit être une chaîne, vous devez donc ajouter les composants individuels. Ne pas être familier avec R Je ne peux pas vous aider à le faire. Dans MS-VBA, l'opérateur de concaténation de chaîne est '&'.

1

La réponse acceptée donne un mauvais conseil qui rend votre application vulnérable à l'injection SQL. Vous devez toujours utiliser des variables de liaison au lieu de concaténer des valeurs directement dans votre requête. Utilisez la méthode dbGetPreparedQUery comme décrit dans cette réponse: Bind variables in R DBI

Questions connexes