1

我正在尝试使用 c++ 和 libpqxx 实现搜索功能。但是我遇到了以下问题:用户可以指定 4 种不同的搜索模式(每种模式都是可选的):

  1. 从日期
  2. 迄今为止
  3. 文件类型
  4. 文件编号

它们中的每一个都是可选的。因此,如果我想使用准备好的语句,我需要 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子句,这取决于实际使用了多少搜索条件,将条件连接到您的字符串中,然后分支到四个prepare代码块之一。(这可能会让您的样式检查器误以为您正在创建注入漏洞,但您当然不是,只要您只插入封闭集合 os 列名的元素。)

请注意,这不是一个很好的解决方案,但即使是 Stephane Faroult(在SQL 的艺术中)也说这是最好的解决方案,那么我该争论谁呢?

于 2010-06-21T10:32:51.503 回答