'Sending Queries to a table in RMySQL, using R variables
I am trying to write data I have created in R and stored in arrays to MySQL table. Currently this is how I am doing it,
for(z in 1:60){
  dbSendQuery(
    mydb, 
    "insert into minutely_predictions(id,server_pred, server_hi, server_lo, os_pred, os_hi, os_lo, sessions_id) values(server__id,server_pred[i],server_hi[i],server_lo[i],os_pred[i],os_hi[i],os_lo[i],sesh_id)"
  )  
}
I'm getting MySQL syntax errors, is there a way to pass the variables I am trying to pass from R into MySQL?
Thanks.
Solution 1:[1]
I was able to fix it by using the function sprintf and storing the variable that way, hopefully this may help others in the future.
queryform = "insert into table(parameters) values('%d' .....)"
query = sprintf(queryform, value[1])
send = dbSendQuery(mydb,query)
Solution 2:[2]
Consider the best practice of parameterization and avoid string concatenation or interpolation of variables to SQL statements.
# PREPARED STATEMENT WITH QMARK PLACEHOLDERZ
sql <- "insert into minutely_predictions(
            id, server_pred, server_hi, server_lo, 
            os_pred, os_hi, os_lo, sessions_id) 
        values (?, ?, ?, ?, ?, ?, ?, ?)"
# ITERATE THROUGH ARRAYS AND BIND PARAMS
for(i in 1:60) { 
    stmt <- dbSendStatement(mydb, sql)
    dbBind(
        stmt,
        list(
            server__id, server_pred[i], server_hi[i], server_lo[i],
            os_pred[i], os_hi[i], os_lo[i], sesh_id
        )
    )
    dbClearResult(stmt)
}
Note: above may only work if using the preferred RMariaDB (replacement of legacy RMySQL).
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Asad Nagra | 
| Solution 2 | Parfait | 
