2010-06-21 77 views
1

我正在嘗試使用C++和libpqxx實現搜索功能。 但我有以下問題: 用戶可以指定4個不同的搜索模式(每個人可選):通過預處理語句實現搜索功能的最佳實踐

    從日期
  1. 直到日期
  2. 文檔類型
  3. 文件編號

每個都是可選的。所以如果我想使用準備好的語句,我需要2^4 = 16個不同的預備語句。好吧,這是可能的,但我想避免這種情況。

做爲一個例子,什麼libpqxx一份準備好的聲明的樣子:

_connection->prepare("ExampleStmnt", "SELECT * FROM foo WHERE title=$1 AND id=$2 AND date=$3") 
    ("text", pqxx::prepare::treat_string) 
    ("smallint", pqxx::prepare::treat_direct) 
    ("timestamp", pqxx::prepare::treat_direct); 

所以我也根本不知道我會怎樣一件這樣的一份聲明中一起。

有沒有其他'好'的方式,我沒有想到?

回答

2

您可以做的最好的做法是有四個不同的->prepare子句,具體取決於實際使用了多少搜索條件,將條件連接到您的字符串中,然後分支到四個prepare代碼塊中的一個。 (這可能會讓你的風格檢查器認爲你正在創建一個注入漏洞,但是當然你不是,只要你只插入封閉的設置os列名的元素即可)。

注意,這不是'這是一個非常好的解決方案,但即使Stephane Faroult(The Art of SQL)也說這是最好的解決方案,所以我可以爭論誰?

+0

感謝您的回答。看起來這可能是(至少比16條準備好的語句好一點點)解決方案。 – 2010-06-21 13:03:16