Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过准备好的语句实现搜索功能的最佳实践 我试图用C++和LIPBQXX实现一个搜索功能。 但我有以下问题: 用户可以指定4种不同的搜索模式(每个模式都是可选的): 从日期开始 迄今为止 文件类型 文件id_C++_Prepared Statement_Libpqxx - Fatal编程技术网

通过准备好的语句实现搜索功能的最佳实践 我试图用C++和LIPBQXX实现一个搜索功能。 但我有以下问题: 用户可以指定4种不同的搜索模式(每个模式都是可选的): 从日期开始 迄今为止 文件类型 文件id

通过准备好的语句实现搜索功能的最佳实践 我试图用C++和LIPBQXX实现一个搜索功能。 但我有以下问题: 用户可以指定4种不同的搜索模式(每个模式都是可选的): 从日期开始 迄今为止 文件类型 文件id,c++,prepared-statement,libpqxx,C++,Prepared Statement,Libpqxx,它们都是可选的。所以,如果我想使用准备好的语句,我需要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

它们都是可选的。所以,如果我想使用准备好的语句,我需要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);
因此,我也不知道如何将这样一份事先准备好的声明拼凑在一起


还有其他我没有想到的“好”方法吗?

最好的方法是使用四个不同的
->prepare
子句,这取决于实际使用的搜索条件的数量,将这些条件连接到字符串中,然后分支到四个
prepare
代码块中的一个。(这可能会让您的样式检查器误以为您正在创建一个注入漏洞,但当然不会,只要您只插入封闭集os列名的元素即可。)


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

谢谢你的回答。这似乎真的是(至少比16条准备好的语句好一点)解决方案。