7

私の知る限り、Rails で次のことができるはずです。

ActiveRecord::Base.connection.select_all("SELECT MONTH(created) AS month, YEAR(created) AS year FROM orders WHERE created>=$1 AND created<=$2 GROUP BY month ORDER BY month ASC",nil,[['created',1],['created',2]])

残念ながら、これはまったく機能していません。どのような形式を使用しようとしても、$1and$2がバインド配列の対応する値に置き換えられることはありません。

他に気をつけなければならないことはありますか?

4

3 に答える 3

6

sanitize_sql_array次のように、モデルで使用する必要があります。

r = self.sanitize_sql_array(["SELECT MONTH(created) AS month, YEAR(created) AS year FROM orders WHERE created>=? AND created<=? GROUP BY month ORDER BY month ASC", created1, created2])
self.connection.select_all r

これにより、SQL インジェクションから保護されます。

于 2013-07-08T09:52:02.307 に答える
-14

あなたが変数を使おうとしているのかどうかはわかりませんが、そうです、変数を使うのはとても簡単です、あなたはそれらを間違って使っています

次のように使用します。

ActiveRecord::Base.connection.select_all("SELECT MONTH(created) AS month, YEAR(created) AS year FROM orders WHERE created>=#{v1} AND created<=#{v2} GROUP BY month ORDER BY month ASC",nil,[['created',1],['created',2]])

ここで、v1とv2は変数です。他に何かしようとしている場合はお知らせください

ありがとう

于 2012-10-06T02:41:27.117 に答える