2012-07-16 61 views
0

我有一個函數可以從表中的字段中找到oid。根據文檔,oid字段會自動創建並自動遞增。聽起來很棒。Ruby中的SQLite查詢失敗,沒有錯誤

def teddy_bear_id_by_url(url) 
    query = "select oid from teddy_bears where url = \"#{url}\"" 
    res = $db.execute(query) 
    return res 
end 

不幸的是此代碼返回一個[](空數組),運行在源碼殼查詢時給出「好」的值(例如4)。

def teddy_bear_id_by_url(url) 
    return $db.execute("select oid from teddy_bears where url = '?'", url) 
end 

以上也不起作用。

我確實檢查了url是否包含我認爲它的含義。

可能發生了什麼?

+0

你確定你的'url'包含你認爲它所做的嗎?沒有前導或尾隨空白?如果你離開where子句,會發生什麼?另外,你真的應該在SQL中使用單引號來處理字符串文字(SQLite允許使用雙引號,但這隻會導致不良的習慣),你應該使用佔位符而不是假裝你是1999年的PHP程序員。 – 2012-07-16 04:29:12

+0

'網址確實包含我認爲它所做的事情。我登錄了它,並且它返回正是它應該的。沒有前導或尾隨空白。我用單引號替換它,但仍然沒有骰子。感謝您的佔位符提示,但我確實嘗試了與佔位符相同的結果。 – tekknolagi 2012-07-16 05:07:39

+0

佔位符版本將是'$ db.execute(「teddy_bears where url =?,url)'(即佔位符周圍沒有引號)的選擇oid。 – 2012-07-16 05:57:47

回答

1

您的url中可能有一些有趣的事情,與您的字符串插值結合在一起,正在搞亂您的SQL。你最好的選擇是使用你的execute電話佔位符:

$db.execute("select oid from teddy_bears where url = ?", url) 
+0

真棒答案,但不幸的是還有一個問題:結果是空白(仍然)。我查詢了:'res = $ db.execute(「select from teddy_bears where url =?,url)',並用'$ log.debug res.inspect'進行檢查。 – tekknolagi 2012-07-16 07:23:56

+0

會發生什麼? – tekknolagi 2012-07-16 07:28:44

+0

@tekknolagi:您是否嘗試過'$ db.execute(「select tiddy_bears oid」)或另一個'url'?你說URL中有空格,在Ruby或SQLite數據庫的'url'變量中,它們被編碼爲'%20'還是'+'? – 2012-07-16 07:48:40