Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在ActiveRecord.find的:条件参数中使用%?_Sql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Sql 如何在ActiveRecord.find的:条件参数中使用%?

Sql 如何在ActiveRecord.find的:条件参数中使用%?,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,我正在尝试这样的查询: Widget.find(:all, :conditions => ["name like %awesome%"]) 但是,我从sanitize_sql中得到一个“格式错误的字符串”异常,将“%”指定为问题 如何执行此查询?试试看 Widget.find(:all, :conditions => ["name like '%awesome%'"]) 刚刚在字符串周围添加了单引号%awesome% 编辑:好的,不需要;实际上不起作用。sql消毒器正在对%s执行

我正在尝试这样的查询:

Widget.find(:all, :conditions => ["name like %awesome%"])
但是,我从sanitize_sql中得到一个“格式错误的字符串”异常,将“%”指定为问题

如何执行此查询?

试试看

Widget.find(:all, :conditions => ["name like '%awesome%'"])
刚刚在字符串周围添加了单引号
%awesome%

编辑:好的,不需要;实际上不起作用。sql消毒器正在对%s执行一些错误操作

这会奏效的

Widget.find(:all, :conditions => ["name like ?","%awesome%"])
根据John Topley的回答,如果您真正需要的话,可以将字符串设置为变量

当遇到SQL错误时,我发现一个有用的技巧是检查
development.log
——它将列出实际针对数据库运行的所有查询。假设您具备SQL的基本知识,那么直接在控制台中调试它们通常是有用的,而不是在ActiveRecord级别进行尝试(尽管我认为在您的情况下,代码在到达该阶段之前就已经开始呕吐了)

尝试以下语法:

term = "awesome"
Widget.all(:conditions => ["name LIKE ?", "%#{term}%"])

您的解决方案不起作用,因为您在%awesome%左右没有报价

添加单引号似乎没有帮助:-(@jcs-日志中报告的SQL语句是什么?谢谢,这非常有效。如果您碰巧解释了我尝试的版本无法正常工作的原因,我们将不胜感激。Rails不会解析条件(即百分比符号)中的SQL。您必须将参数传递到条件中。当您使用John建议的上述语法,Rails可以通过转义字符来清理输入,这样用户就不能进行SQL注入攻击。在此过程中,它使用引号将输入括起来。这是您应该使用的方法,以避免潜在问题:-)