将textInput值传递给MYSQL查询的语法

时间:2018-04-26 14:30:54

标签: mysql r shiny

我试图将textInput的值传递给MySQL查询。

第一个问题是当使用MySQL作为驱动程序时,LIKE运算符与textInput相结合的正确语法是什么?我应该在查询语句中放置%%?

其次是我如何才能最好地捕获textInput的反应性,以便能够将它传递给查询并创建表?

  library(shiny)
  library(DBI)
  library(RMySQL)

  server <- shinyServer(function(input, output, session) {
                con <- dbConnect(MySQL(), user='user', port = 3306, password='pwd', dbname='db', host='host' )

               on.exit(dbDisconnect(con), add = TRUE) 

      output$tableview <- renderTable({

             con <- dbConnect(MySQL(), user='user', port = 3306, password='pwd', dbname='db', host='host' )

             on.exit(dbDisconnect(con), add = TRUE)


           table <- reactive({
                    dbGetQuery(con, statement = 
                    paste0(" SELECT author,  title, publicationDate,  FROM publications  
                   WHERE publications.abstract LIKE %'",input$textSearch,"'% ")
                 )
                   })

                    table()

              })




       session$onSessionEnded(function() { dbDisconnect(con) })
         })


ui_panel <- 
        tabPanel("Text Input Test",
          sidebarLayout(
            sidebarPanel( 

             textInput("textSearch", " Search for keyword", ''),


                       br(),
                       submitButton("Update Table View"),
                       br()
           ),
           mainPanel(
           tabsetPanel(tabPanel("Table",tableOutput("tableview"))

           )
         )
    ))


 ui <- shinyUI(navbarPage(" ",ui_panel))

runApp(list(ui=ui,server=server))

类似问题How to read a TextInput in ui.R, process a query with this value in global.R and show in server.R using Shiny处理输出和处理我不具备的全局文件。

欢迎任何见解。

1 个答案:

答案 0 :(得分:1)

您当前的代码应该构造此SQL:

SELECT ... FROM publications WHERE publications.abstract LIKE %'test'%

问题: %应位于''内。

更新了一行:

paste0("SELECT author, title, publicationDate,  FROM publications WHERE publications.abstract LIKE '%",input$textSearch,"%' ")

然后它应该构造这个SQL:

SELECT author, title, publicationDate, FROM publications WHERE publications.abstract LIKE '%test%'

为了进行测试,我建议使用renderText()verbatimTextOutput()将生成的SQL呈现为文本,并查看结果。

您还可以考虑使用glue包来安全地构建SQL查询。

对于您的第二个问题,Action Buttons文章可能有用。