Rails like 模糊查询时的 syntax error

feng041921 · 2014年06月06日 · 最后由 swordray 回复于 2014年06月06日 · 4232 次阅读

之前都这么写模糊查询,好像也没问题

hour = Hour.where("desc like ?", "#{today}").take

但是今天服务器上报错

ActionView::Template::Error (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 'desc like '4') LIMIT 1' at line 1: 
SELECT  `hours`.* FROM `hours`  WHERE (desc like '4') LIMIT 1):

我直接试了下 sql 查询,发现对于 mysql 必须写成

ELECT  `hours`.* FROM `hours`  WHERE (`desc` like '4') LIMIT 1):

那么是不是 rails 查询的时候也要写成

hour = Hour.where(" `desc` like ?", "#{today}").take

我看官方的资料上也没有这么写,什么时候应该要加``呢?求解惑

desc 是个关键词吧,不宜用作字段名

School.where("name like ?","#{name}") 这样写可以啊。没报错啊。

#1 楼 @chenge 一语惊醒啊 应该是这个原因。。。

#2 楼 @yiyaqin 对啊 通常这样写没问题,可能是因为 desc 是 mysql 的关键字

#4 楼 @feng041921 同时还可能经常用但是会出错的关键词是 type

以前不小心用 order 做字段名,Rails 可以正常处理也就没注意,没经验的运维工程师看到哭了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号