relacionadas - insertar datos php y mysql ejemplos
¿Cómo insertar valores de entrada reactiva desde una aplicación brillante en una base de datos MySQL? (2)
Tienes un problema en:
paste("insert into scenario1 (toss, dec, rat, timestamp)
values (",input$toss,",",input$decision,",",input$rating,"now())")
El problema es: No, antes ahora ():
paste("insert into scenario1 (toss, dec, rat, timestamp)
values (",input$toss,",",input$decision,",",input$rating,",now())")
Eso debería hacer que la consulta se ejecute. Mire las declaraciones preparadas, que evitarán este tipo de errores de concatenación (muy comunes en todos los casos).
Creé un experimento en línea con el paquete brillante para R. Digamos que tengo 3 valores reactivos llamados "lanzamiento", "decisión" y " calificación" .
Además, lancé una base de datos MySQL en el servicio web de Amazon RDS. La versión es MySQL 5.6.22 .
Conseguí enviar exitosamente valores no reactivos, como la marca de tiempo, a la base de datos MySQL. Así que supongo que el problema es dónde ubicar el código hablando con MySQL dentro del código Server.R. Para valores no reactivos, funciona perfectamente cuando el código está fuera (antes) de la función de servidor reactivo. Pero con valores reactivos, supongo que debería estar en algún lugar dentro.
Intenté este código:
Server.R
library(shiny)
library(RMySQL)
library(DBI)
con <- dbConnect(MySQL(), dbname="db", username="myname", password="mypassword", host="myhost.com", port=xxxx)
function(input, output, session){
sql <- reactive({
paste("insert into scenario1 (toss, dec, rat, timestamp)
values (",input$toss,",",input$decision,",",input$rating,"now())")
})
result<-reactive({dbSendQuery(con, sql())})
}
De esta manera, no recibo un mensaje de error. Entonces, tal vez el error esté dentro de la insert into
-code.
Además, no estoy seguro de si los paquetes que utilicé son ideales para este propósito. Probé muchas cosas. Cada vez que agrego un valor reactivo al dejarlo fuera de la cita SQL, deja de funcionar. Estoy empezando a pensar que a RMySQL le falta esa característica. No hay nada sobre insert into
en el manual.
¿Alguien puede detectar el error que cometí?
Finalmente, pude hacer que la consulta se ejecutara con este código:
writingMarks <- function(input){
con <- dbConnect(MySQL(), dbname="db", username="myname", password="mypassword",
host="myhost.com", port=xxxx)
result <- sprintf<-("insert into scenario1 (toss, dec, timestamp) values (%s,%s,%s)",
input$toss, input$decision, "now()")
dbSendQuery(con, result)
}
No pude hacer que se ejecutara la consulta de paste
. Con sprintf
hay menos confusión con las comas.
Y, sí, de hecho tuve que agregar un isolate()
. Lo inserté en un observe()
. Entonces se ve así:
observe({
if (input$condition==1){
isolate({
writingMarks(input)
})
}
return()
})