我想知道如果任何人有使用sqlite3的寶石與紅寶石的1.9.x以下語句之間的差異作任何澄清:SQLITE3字符串在where子句似乎混淆
@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
正常工作?
雖然不完全是你的問題的答案,但你應該肯定**熟悉[SQL注入](http://bobby-tables.com/)的主題。 – Jan 2012-04-05 21:36:24
你的''「一些魔法值」真的是什麼樣的,「我無法查詢」c「列」是什麼意思?我猜你的嵌入式單引號有問題,只需要知道在哪裏使用['SQLite3 :: Database.quote'](http://rubydoc.info/gems/sqlite3/SQLite3/Database。引用)。 – 2012-04-05 22:54:11
我知道數據庫劫持的問題 - 但這是一個與用戶數據上的命令行相關的腳本。他們可以隨心所欲地執行任何操作:) – user632657 2012-04-06 17:38:50