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

时间:2014-09-20 05:34:11

标签: sql ruby-on-rails ruby ruby-on-rails-4

我在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 

我收到了错误

ERROR

  

SELECT COUNT(orders_header.id,orders_header.created_at)FROM   orders_header WHERE(shop_id = 99,customer_id = 1,hash_key喜欢   '539de64e8793790430052bc861dd0ff521334e32')

     

Mysql2 ::错误:您的SQL语法中有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   在'orders_header.created_at)FROM orders_header WHERE附近使用   (shop_id = 99和第1行的customer_':SELECT COUNT(orders_header.id,   orders_header.created_at)FROM orders_header WHERE(shop_id = 99和   customer_id = 1和hash_key之类的   '539de64e8793790430052bc861dd0ff521334e32')

2 个答案:

答案 0 :(得分:0)

您最近是否已升级到rails 4.1?在这种情况下,它可能是https://github.com/rails/rails/issues/15138

中提到的已知问题

答案 1 :(得分:0)

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

where("shop_id=?", shop_id)

所以要清理整个where语句,这可能是这样的

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