2011-04-01 60 views
1

可變我存儲在變量username一個名字,想拉用戶的行信息,當我嘗試使用Ruby的MySQL查詢

result = dbh.query("SELECT * FROM maintab WHERE user = '#{username}'") 

我沒有得到任何結果。如果我手動輸入用戶名,它會返回結果。如何格式化我的查詢,以便我可以使用變量?

+3

當心http://en.wikipedia.org/wiki/SQL_injection – 2011-04-01 06:58:30

+0

謝謝你的提醒,我一定會注入攻擊證明我所有的問題一旦我真的得到一切加工。 – Arbiter 2011-04-01 07:27:29

+0

你確定'username'變量不是零或emty嗎? – fl00r 2011-04-01 07:34:41

回答

2

嘗試調試這種方式:

username = "Peter" # any of your real name 
result = dbh.query("SELECT * FROM maintab WHERE user = '#{username}'") 

它應該工作。看起來你usernamenilblank

+0

瘋狂:我通過在屏幕上輸入用戶名和輸出變量只是爲了確保它在那裏,它是。然而,當我像上面設置用戶名時,它的工作。結果發現變量上有一些額外的東西,.strip將其正確地清除。謝謝。 – Arbiter 2011-04-01 07:42:41

+0

@Arbiter:你在談論如何在數據清理(即SQL注入)之前讓它工作...... – 2011-04-01 16:16:51

+0

我很愚蠢地認爲gem在查詢中使用變量時遇到了麻煩。那會教我... – Arbiter 2011-04-01 19:38:36

0

打開IRB並嘗試打印您擁有的內容。

#{}對於單引號與雙引號的轉義行爲如何?

這應該回答你的問題。

+0

我不確定我是否可以嘗試IRB。我在遠程服務器上運行腳本。我把它找出它發現的行數,看它是否發現任何東西。我相信我正確地嘗試了逃脫的雙引號並達到了相同的結果。它很可能是我做錯了,雖然 – Arbiter 2011-04-01 07:29:08