Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40451
  • 博文数量: 27
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-24 00:44
文章分类
文章存档

2011年(1)

2009年(26)

我的朋友
最近访客

分类: Java

2009-05-12 18:23:14

比如说,我们要从数据库中进行like查询相似的记录:
  1. class TasksController < ApplicationController  
  2.  def index  
  3.   @tasks = Task.find(:all,:conditions=>"name LIKE ’%#{params[:query]}%’")  
  4.  end  
  5. end
这样的做法有问题,我们来看
因为如果用户输入的参数里面包含 ‘, 例如:Task 1’TEST,那么就会报错了。

解决的方法如下,我们把conditions这个参数由一个字符串改为一个数组如下:
:conditions => ["name LIKE ?", "%#{params[:query]}%"]

其中有几个问号,后面就应该跟着几个参数。这样的话,那么单引号就会被escape


当然,如果你用的是find_by 方法,那么rails也会自动帮你escape,例如
find_all_by_complete(false)



阅读(421) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~