php - 중첩 된 조건을 혼동하지 않고 "AND"표현식으로 동적 SQL을 작성 하시겠습니까?

기사 출처 php sql if-statement dynamic-sql

나는 일반적으로 PHP와 코딩에 상당히 익숙합니다.

설정되었는지 테스트해야하는 일련의 조건이 있습니다.
$ option1, $ option2, $ option3입니다.

if (isset($option1)){
    if (isset($option2)){
        if (isset($option3)){
            $query = "SELECT *
                               FROM Group
                               WHERE FirstOption = '$option1' AND SecondOption = '$option2' AND ThirdOption = '$option3'";
        }
        else {
            $query = "SELECT *
                               FROM Group
                               WHERE FirstOption = '$option1' AND SecondOption = '$option2";
        }
    }
    else {
        $query = "SELECT *
                           FROM Group
                           WHERE FirstOption = '$option1' AND ThirdOption = '$option3";
    }
}
else {
    // .. snip, much more duplicated code ..
}


따라서 여기서 문제는 조건이 설정되었는지 여부에 따라 mysql에 대한 고유 한 쿼리가 필요하다는 것입니다. 그러나 그것들은 서로 매우 중요하며 실제로 7 가지 많은 옵션이 있으므로 분기는 절대적으로 방대합니다! 거의 혼란스러워서 3시에 멈췄다.

이 글을 쓰는 데 훨씬 뛰어난 방법이 있어야합니다. 누구든지 내가 더 잘 이해하도록 도울 수 있습니까?
동적 SQL 빌드가 필요하지 않습니다. 논리를 사용하십시오.

SELECT *
  FROM Group
 WHERE (FirstOption = '$option1' or '$option1' = '') 
   AND (SecondOption = '$option2' or '$option2' = '')
   AND (ThirdOption = '$option3' or '$option3' = '')


이상적으로는 자리 표시 자와 준비된 문장을 사용하는 것이 좋지만 위의 내용은 교육 목적으로 가장 명확합니다.

궁금한 사람이있는 경우-여기에는 상당한 쿼리 오버 헤드가 없습니다. 모든 최신 데이터베이스 엔진은 '$option1' = '' 식을 상수 값으로 최적화하여 한 번만 부울로 평가합니다.

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/14351617/

관련 기사
php - PHP를 사용하여 다른 이미지에서 한 이미지의 위치 결정
php - 예를 들어 3의 루트는 2입니다.
php - Codeigniter 포함보기
php - Amazon MWS 제품 카테고리의 전체 목록은 어디에서 얻을 수 있습니까? [닫은]
php - MYSQL 연도의 중단 날짜 중에서 선택
php - PHP를 통해 wait_timeout 및 max_allowed_packet을 변경하는 방법이 있습니까? [복제]
php - .csv 파일을 생성 할 수 없습니다 : PHP
php - PHP를 통해 프로세스에 신호 보내기
php - 컬 페이지 제목
php - Zend Framework 2-주석 양식이 작동하지 않습니다.