2016-09-11 5 views
-1

내 웹 사이트에서 searcher를하고있어 내가 선택한 쿼리에 필요한 모든 제약 조건을 포함해야합니다.하위 쿼리 내 SQL

사용자는 키워드를 쓰고 최저 가격과 최대 가격을 쓰고 일부 카테고리를 선택할 수 있지만 모든 필드를 채워서 결과를 찾지 않아도됩니다. 모든 것을 채우거나 그 중 하나만을 채워서 찾을 수 있어야합니다. 그래서 그것을 분리하기 위해 constrait를해야합니다. 같은

내가 노력하고있어 뭔가 : 그것은이 때문에 처음에는 사용자가 선택한 특정 범주를 반환 할 때문에 여분의 문제가 여기에

$var1 = $_POST['var1']; //name - type = text 
$var2 = $_POST['var2']; //min price - type = integer 
$var3 = $_POST['var3']; //max price - type = integer 
$var4 = $_POST['var4']; //array of categories 

$select_query = "SELECT * FROM objects WHERE x=1"; 

if($var1 != NULL || $var1 != ''){ 
"AND name like '%$var1%'" 
} 

if(($var2 != NULL || $var2 != '') AND ($var3 != NULL || $var3 != '')){ 
"AND price=>$var2 AND price =>$var3'" 
} 

는을 할 수 및 쿼리를 계속하지만, 그런 다음 카테고리 사이에 OR이 있어야합니다. 문제는 마지막 하나가 실패한다는 것입니다.

if($var4 != NULL || $var4 != ''){ 
     " AND("; 
     foreach $var4 as $cat){ 
     "id_category = $cat OR"; 
     } 
     ")"; 
    } 

팁이 있습니까? 감사! PHP의 내파 기능을 사용하여

+0

코드를보고 테스트하지 않고 마지막 부분에 항상 후행 OR이 있기 때문에 마지막 부분이 실패한 것처럼 보입니다. 그래서 당신은 문법 오류를 일으키는'... AND (id_category = $ cat OR id_category = $ cat OR)'와 같은 것을 얻는다. –

+0

필드 이름이 db 컬럼 이름에 해당 하는가? – RamRaider

+0

예, 그 중 하나의 문제이지만, 어떻게 해결할 수 있는지 모르겠습니다. @RamRaider 예! –

답변

0

감사합니다,하지만 난 : 코드가 데이터베이스와 상호 작용하도록 또한

는, SQL 주입하는 방법과 제대로 PHP와 SQL 쿼리를 탈출하는 방법에 읽어주십시오 것은 안전 쿼리를 잘못하고있었습니다!

솔루션이었다 :

$select_query = "SELECT * FROM objects WHERE x=1"; 

if($var1 != NULL || $var1 != ''){ 
$select_query = "AND name like '%$var1%'" 
} 

가 나는을위한을 가진 마지막 예를했다.

감사합니다.