2011-02-07 60 views
0

我正在使用SQLite C接口來編寫應用程序。由於我喜歡安全性,因此我正在使用預準備語句來查詢數據庫。在一個這樣的查詢中,我使用MATCH關鍵字從虛擬數據庫中選擇行進行全文搜索。這裏有一個例子:在SQLite中使用預準備語句和全文搜索

SELECT * FROM Emails 
WHERE (Subject LIKE ?001 OR ?001 IS NULL) 
    AND (Author LIKE ?002 OR ?002 IS NULL) 
    AND (Body MATCH ?003 OR ?003 IS NULL) 

這允許用戶輸入任何方面(主題,作者,或身體)單獨或以任何組合做搜索。任何未輸入的術語,我將NULL綁定到該參數。該聲明的問題是,您不能使用OR關鍵字和MATCH關鍵字。我正在尋找一個可以與MATCH關鍵字一起使用的語句,如果沒有在「正文」列中搜索,則返回所有行。有這樣的說法嗎?

回答

0

我結束了在運行時修改SQL語句LIKE「%」來代替匹配。不是很優雅,但它現在工作。

0

我建議如下:

SELECT * FROM emails 
WHERE ... 
    AND (CASE (SELECT COUNT(*) FROM emails WHERE body MATCH ?003) 
     WHEN 0 THEN 1 
     ELSE body MATCH ?003 
     END) 
+0

您確定此代碼有效嗎?當我將NULL綁定爲參數3時,它的行爲如所期望的那樣。當我綁定一個實際的字符串時,我得到錯誤「無法在請求的上下文中使用函數MATCH」。 – Sparafusile 2011-02-07 23:48:02