如何使用带有数组参数和 nil 条件的 ActiveRecord where 方法

问题描述 投票:0回答:1
Product.where(['color = ?',nil])

给出 SQL

SELECT "products".* FROM "products" WHERE (color = NULL)

而不是我想要的,那就是:

SELECT "products".* FROM "products" WHERE (color IS NULL)

color IS NULL
,不是
color = NULL

使用哈希语法:

Product.where(color: nil)

给了我想要的

SELECT "products".* FROM "products" WHERE "products"."color" IS NULL

但我认为使用哈希语法会失去数组语法提供的反 SQL 注入的好处。

编辑 - 我省略了说条件将是一个变量,有时但并不总是为零:

Product.where(['color IS ?',nil])
按照我的要求做,但是

Product.where(['color IS ?','red'])
例如当然会失败

sql ruby-on-rails activerecord
1个回答
0
投票

你错了,它提供了与数组语法相同的 SQL 注入保护。

main> Foo.where name: "' OR 1=1; --"
  Foo Load (0.8ms)  SELECT "foos".* FROM "foos" WHERE "foos"."name" = $1 /* loading for pp */ LIMIT $2  [["name", "' OR 1=1; --"], ["LIMIT", 11]]
[]
© www.soinside.com 2019 - 2024. All rights reserved.