0

ruby 1.9.x で sqlite3 gem を使用した次のステートメントの違いについて、誰かが明確に説明しているかどうか疑問に思っています。

@db.execute("INSERT INTO table(a,b,c) VALUES (?,?,?)", 
some_int, other_int, some_string)

@db.execute("INSERT INTO table(a,b,c) VALUES (#{some_int},"+ 
+"#{some_int}, #{some_string})")

私の問題は次のとおりです。挿入に最初の方法を使用すると、次のステートメントを使用して「c」列を照会できません。

SELECT * FROM table WHERE c='some magic value'

私はこれを使用できます:

"SELECT * FROM table WHERE c=?", "some magic value" 

しかし、私が本当に使いたいのは

"SELECT * FROM table WHERE c IN ('#{options.join("','")}')" 

そして、これはインサートのタイプでは機能しません。

INデータベースレベルでの違いが正しく機能するのを妨げていることを誰かが知っていますか?

4

2 に答える 2

0

私はかなり前にこれを理解しましたが、誰かが別のときにこの質問を見つけた場合に備えて、戻って指摘するのを忘れていました.

違いはブロブであることがわかります。上記の最初の形式 ((?,?) を使用した置換方法) を使用すると、SQLite3 はブログを使用してデータを入力するようです。ただし、通常の SQL ステートメントを作成すると、通常の文字列として挿入され、2 つのステートメントは同等ではありません。

于 2012-09-18T20:52:37.400 に答える