提问者:小点点

rails 4:Mysql2::错误:您的SQL语法有错误


我在rails 4应用程序上有以下代码

query= OrderHeader.select("orders_header.id, 
  orders_header.created_at").where("shop_id=#{shop_id} and 
  customer_id=#{customer_id} and hash_key like 
    '#{current_hash_key}'").order("id desc") 
       if query.nil? 
         return true # no duplicates found 
      end 
      if (query.count>0) # duplicates found 
         #nothing
      end 

而我得到了错误

错误

orders\u headerWHERE中选择COUNT(orders\u header.id,orders\u header.created\u at)(shop\u id=99,customer\u id=1,散列\u key,如'539de64e8793790430052bc861dd0ff521334e32')

MySQL2::Error:您有一个错误,在您的SQL语法;检查手册,对应于您的MySQL服务器版本的正确语法使用附近'orders_header.created_at)从orders_headerWHERE(shop_id=99和customer_在第1行:选择计数(orders_header.id,orders_header.created_at)从orders_headerWHERE(shop_id=99和customer_id=1和hash_key像'539de64e8793790430052bc861dd0ff521334e32')


共2个答案

匿名用户

你最近升级到rails 4.1了吗?在这种情况下,这里提到的已知问题可能https://github.com/rails/rails/issues/15138

匿名用户

你需要对字符串内的表名使用复数形式,orders_headers.id而不是orders_header.id,等等,也为了避免sql注入,你应该使用传递给字符串的params而不是把字符串内的参数,例如:

where("shop_id=?", shop_id)

所以为了清理你的where语句,它可能是这样的

where(shop_id: shop_id, customer_id: customer_id).where("hash_key like '?'",current_hash_key)