2010-06-21 6 views
1

C++ 및 libpqxx를 사용하여 검색 기능을 구현하려고합니다. 는하지만 다음과 같은 문제가 생겼어요 : 사용자는 4 개 개의 다른 검색 패턴 (그들 각각의 옵션)를 지정 할 수 있습니다 : 일로부터준비된 문을 통해 검색 기능을 구현하는 모범 사례

  1. 을 날짜
  2. 문서 유형
  3. 문서까지
  4. id

각각은 선택 사항입니다. 따라서 준비된 명령문을 사용하려면 2^4 = 16 개의 준비된 명령문이 필요합니다. 가능한 일이지만, 나는 이것을 피하고 싶습니다.

_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); 

따라서 나는 또한 내가 함께 같은 준비된 문을 잇 얼마나 아무 생각이 : 예를 들어 여기에

는 libpqxx에서 준비된 문은 어떻게 생겼는지.

제가 생각하지 못한 다른 '좋은'방법이 있습니까?

답변

2

실제로 수행 할 검색 기준의 수에 따라 네 가지 ->prepare 절을 가지며 조건을 String으로 연결 한 다음 네 개의 prepare 코드 블록 중 하나로 분기하십시오. (아마도 당신의 스타일 검사기가 주입 취약점을 만든다고 생각하게 될 것입니다 만, 닫힌 set os 열 이름의 요소 만 삽입하는 한 당연히 그렇지 않습니다.)

이것은 isn ' 아주 좋은 솔루션이지만 Stephane Faroult (The Art of SQL)조차도 이것이 가능한 최선의 방법이라고 말하면서 누가 논하겠습니까?

+0

답변 해 주셔서 감사합니다. 이것은 이것이 (적어도 16 개의 준비된 문장보다 조금 더 좋을 수 있습니다) 해결책 일 수 있습니다. –

관련 문제