2013-11-24 8 views
6

Ho alcune stringhe in R che dovrebbero essere scritte in una tabella MySQL utilizzando RODBC. Il problema è che non so come gestire le virgolette all'interno delle stringhe per ottenere errori di MySQL ma anche per non rovinare il testo?Come evitare in modo sicuro le virgolette in R per inviare il testo a SQL?

Sono sicuro che la soluzione è una specie di semplice ma al momento sto tipo di bloccato nel mio pensiero - non ottengo fuori dalla scatola ... fuga non fuggire fuggire due volte con 2 barre rovesciate o meglio 4 (o 8, solo per essere sul lato salvare)

esempio:

require(RODBC) 
con  <- odbcConnect("MyMySQLDatabase") 

string <- "What's up?" 
query <- "INSERT INTO table (textcolumn) VALUES" 

value <- paste0("('", string, "')") 
sql  <- paste(query, value, ";") 

res  <- sqlQuery(con, sql) 

(Come gestire il testo che ho letto in da file con possibili virgolette singole e doppie?)

risposta

4

io Comincerei da virgolette raddoppio:

string <- gsub("'","''",string) 

questo sarà il doppio le virgolette:

string 
[1] "What''s up?" 
+0

Credo non capisco: Sarebbe non essere come la sostituzione tutte le citazioni singole di "bubblediboo" o cancellarle tutte insieme? Voglio davvero conservare il testo così com'è. – petermeissner

+0

@marvin_dpr devi solo aggiungere questa linea al tuo codice e funzionerà. – agstudy

+0

Ora posso controllare il codice, funziona, MA PERCHÉ? – petermeissner

5

Se si sta usando RMySQL la funzione dbEscapeStrings() fornito dal pacchetto è probabilmente il modo migliore per andare. La funzione si occupa di fuggire attenendosi agli standard stabiliti da MySQL. LINK

require(RMySQL) 
mysql <- dbDriver("MySQL") 
con  <- dbConnect(mysql, user="superuser", 
       password="totallyawesomeandsavepassword", 
       host="dbhost.hosthome.dom", 
       dbname="awesome" 
       ) 
dbEscapeStrings(con,"'''''fhf'''''''''rh'''''''''") 

# [1] "\\'\\'\\'\\'\\'fhf\\'\\'\\'\\'\\'\\'\\'\\'\\'rh\\'\\'\\'\\'\\'\\'\\'\\'\\'" 

s' RMySQL manuale indica che:

dbEscapeStrings Attualmente, solo il driver MySQL implementa questo metodo

Problemi correlati