2012-04-05 37 views
0

我想知道如果任何人有使用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正常工作?

+2

雖然不完全是你的問題的答案,但你應該肯定**熟悉[SQL注入](http://bobby-tables.com/)的主題。 – Jan 2012-04-05 21:36:24

+0

你的''「一些魔法值」真的是什麼樣的,「我無法查詢」c「列」是什麼意思?我猜你的嵌入式單引號有問題,只需要知道在哪裏使用['SQLite3 :: Database.quote'](http://rubydoc.info/gems/sqlite3/SQLite3/Database。引用)。 – 2012-04-05 22:54:11

+0

我知道數據庫劫持的問題 - 但這是一個與用戶數據上的命令行相關的腳本。他們可以隨心所欲地執行任何操作:) – user632657 2012-04-06 17:38:50

回答

0

不行蝙蝠你寫此行查詢SQLite中瀏覽我前一段想通了這一點,卻忘了回來,並指出來,以防有人在另一時間發現此問題。

區別是blob。顯然,當你使用上面的第一個表單(使用(?,?)的替換方法)時,SQLite3使用博客輸入數據。但是,如果構造一個普通的SQL語句,它將作爲常規字符串插入,而兩者不等效。

0

插入不可行行查詢,但行數據查詢用於獲取數據的時間,這一個工作。

的SQLite在你的移動應用程序使用的時間在工作