1

c++とlibpqxxを使用してSearch-Functionを実装しようとしています。しかし、次の問題があります。ユーザーは4つの異なる検索パターンを指定できます(それぞれオプション)。

  1. 日付から
  2. 日まで
  3. ドキュメントタイプ
  4. ドキュメントID

それらのそれぞれはオプションです。したがって、プリペアドステートメントを使用する場合は、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);

したがって、私はそのような準備されたステートメントをどのようにつなぎ合わせるのかもわかりません。

私が考えていなかった他の「素敵な」方法はありますか?

4

1 に答える 1

2

最善の->prepare方法は、実際に使用されている検索条件の数に応じて4つの異なる句を設定し、条件を文字列に連結してから、4つのprepareコードブロックの1つに分岐することです。(これにより、スタイルチェッカーがインジェクションの脆弱性を作成していると思わせる可能性がありますが、閉集合のos列名の要素のみを挿入する限り、もちろんそうではありません。)

これはあまり良い解決策ではないことに注意してください。しかし、Stephane Faroult(The Art of SQL)でさえ、これが可能な限り最良の解決策であると言っています。

于 2010-06-21T10:32:51.503 に答える