【问题标题】:Active record query select_all, prepared statement活动记录查询 select_all,prepared statement
【发布时间】:2013-07-11 16:16:14
【问题描述】:

我正在尝试编写如下准备好的语句:

@fofs = FileOrFolder.connection.select_all("select * from newtestdocB.file_or_folders where name like","%#{params[:search]}%")

原来是mysql控制台上的一个错误查询。不接受变量 %#{params[:search]}% 的值进行查询

请更正我的查询...

控制台消息:

Parameters: {"search"=>"do", "cluster_id"=>"2", "datasetid"=>"1", "id"=>"1"}
  %do% (0.2ms)  select * from newtestdocB.file_or_folders where name like

ActiveRecord::StatementInvalid (Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1: select * from newtestdocB.file_or_folders where name like):

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.1 ruby-on-rails-3.2


    【解决方案1】:

    Try a placeholder ?

    "select * from newtestdocB.file_or_folders where name like ?","%#{params[:search]}%"

    见上述语句中的问号,将由逗号后面的参数填写。

    如果上面的语句不起作用,这个必须起作用,使用“+”连接,注意“like”旁边的空格

    sql = "select * from newtestdocB.file_or_folders where name like <<space>>" + "%#{params[:search]}%"
    
    FileOrFolder.connection.select_all(sql)
    

    【讨论】:

    • 它不工作......它把它作为一个完整的字符串和类似的参数它不在引号中......输出sql:select * from newtestdocB.file_or_folders where name like %d% .................... %d% 不在引号中 ...
    • "select * from newtestdocB.file_or_folders where name like >" + "%#{params[:search]}%" ...也不工作!
    • "select * from newtestdocB.file_or_folders where name like " + "%#{params[:search]}%" ..here..don't give >, 我的意思是留下文字空间...
    • ...也试过了...... dint 工作......当我在控制台中签入时,它会在“喜欢”之后停止 select * from newtestdocB.file_or_folders where name like
    • 则表示 params[:search] 为 nil,就像这里...1.9.3-p385 :003 > "sadf " + "#{nil}" => "sadf "跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2013-02-01
    • 2013-04-23
    • 2016-11-10
    相关资源
    最近更新 更多