Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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
Ruby on rails RubyonRails 2.3类SQL查询_Ruby On Rails - Fatal编程技术网

Ruby on rails RubyonRails 2.3类SQL查询

Ruby on rails RubyonRails 2.3类SQL查询,ruby-on-rails,Ruby On Rails,我能够在Rails 2.3中执行类似查询的唯一方法是: access_points.all(:conditions => "mac_address LIKE '%#{@q}%'") 官方文档指出,这种方法是不安全的,因为受SQL注入的影响: 将自己的条件构建为纯字符串会使您容易受到SQL注入攻击。例如,Client.first(:conditions=>“类似于“%”#{params[:name]}%')的名称)是不安全的。有关使用数组处理条件的首选方法,请参见下一节。 但不幸的是,它

我能够在Rails 2.3中执行类似查询的唯一方法是:

access_points.all(:conditions => "mac_address LIKE '%#{@q}%'")
官方文档指出,这种方法是不安全的,因为受SQL注入的影响:

将自己的条件构建为纯字符串会使您容易受到SQL注入攻击。例如,Client.first(:conditions=>“类似于“%”#{params[:name]}%')的名称)是不安全的。有关使用数组处理条件的首选方法,请参见下一节。

但不幸的是,它并没有解释如何正确地进行LIKE查询,而且我还没有在谷歌上找到它,因为LIKE是一个非常通用的关键字


有什么提示吗?我是Rails新手,但我对Symfony和Django有经验。

这就是您想要的方式:

:conditions => ['mac_address LIKE ?', "%#{@q}%"]

这是您想要的方式:

:conditions => ['mac_address LIKE ?', "%#{@q}%"]

奥斯卡是对的。一些解释。正如Oscar所示,您必须使用rails sql查询过滤。因此,您将“like?”放在sql语句中,并将搜索字符串(使用ruby代码)放在sql语句之外。Rails将接管并正确清理搜索字符串


还要记住,如果查询Postgres,它默认为区分大小写的查询,但也有一个不区分大小写的ilike。这已经让我在一些场合

奥斯卡是对的。一些解释。正如Oscar所示,您必须使用rails sql查询过滤。因此,您将“like?”放在sql语句中,并将搜索字符串(使用ruby代码)放在sql语句之外。Rails将接管并正确清理搜索字符串


还要记住,如果查询Postgres,它默认为区分大小写的查询,但也有一个不区分大小写的ilike。这已经让我在一些场合

使用
语法并将条件放入数组中。搜索“rails 3 like query”会返回多个点击,其中包括哪个点击。使用
语法并将条件放入数组中。搜索“Rails3likequery”会返回多个点击,包括哪一个。说明此处不应在数组的第二部分使用字符串转义。这就是您试图使用数组语法避免的部分。你想要的是
:条件=>['mac\u address LIKE?',@q]
。说明此处不应在数组的第二部分使用字符串转义。这就是您试图使用数组语法避免的部分。你想要的是
:条件=>['mac\u address LIKE?',@q]