我正在尝试使用c ++和libpqxx实现Search-Function。 但是我遇到了以下问题: 用户可以指定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);
因此,我也不知道如何将这样一份准备好的声明放在一起。
有没有其他'好'的方式我没想到?
答案 0 :(得分:2)
您可以做的最好的事情是拥有四个不同的->prepare
子句,具体取决于实际使用的搜索条件数量,将条件连接到您的String中,然后分支到四个prepare
之一代码块。 (这可能会让你的样式检查器误以为你正在创建一个注入漏洞,但当然你不是,只要你只插入封闭集os列名的元素。)
请注意,这不是一个非常好的解决方案,但即使是Stephane Faroult(在 SQL的艺术中)也说这是最好的解决方案,那么我应该争辩谁呢?