mysql 검색 필터링

mysql 검색 필터링

QA

mysql 검색 필터링

답변 5

본문

$name = $_GET['name'];

 

$sql = "SELECT address WHERE name = '{$name}'";

 

위 구문에서

$name을 입력 받지 않았을 때는 name = '{$name}'을 참으로 만들수 있는 방법이 있나요? 

 

즉, 입력값이 없을때는 조건 자체를 없애서 모든 결과를 출력하게 만들고 싶어요.

 

이 질문에 댓글 쓰기 :

답변 5

$sql = "select address from 테이블명" where wr_num!='' "  // 테이블에서 필수값(순서?)

if($_GET['name']) { $sql = $sql . " and name='".$_GET['name']; }

if($_GET['조건2']) { $sql = $sql . " and 조건2='".$_GET['조건2']; } 

if($_GET['조건3']) { $sql = $sql . " and 조건3='".$_GET['조건3']; }
if($_GET['조건4']) { $sql = $sql . " and 조건4='".$_GET['조건4']; }

검색에서 get 은 인젝션공격에 취약합니다.  가급적 post 를 사용하는것이 좋습니다.

질문이 약간 오류가 있으신거 같습니다만

일단,  

입력값이 없을때는 조건 자체를 없애서 모든 결과를 출력하게 만들려면  

아래처럼 하시면 됩니다. 


$name = $_GET['name'];

 

if($name) { 

$sql = "SELECT address from 테이블명 WHERE name = '{$name}'";

}else{

$sql = "SELECT address from 테이블명";

}


답변 감사드립니다. 그런데 위 방식대로 하면 

where 절에 and 로 조건이 많이 들어가게 되면 복잡하게 되서요.

 

where 

and

and

and

이런 구문에서 변수 하나가 안 들어오면 그 and 절은 무조건 참으로 만들어서 

다른 조건이 필터링 된 결과값을 내고 싶습니다.

$name = $_GET['name'] . "'%";

$sql = "SELECT * FROM g5_member WHERE mb_name LIKE '{$name}'";


이렇게 % 연산자를 쓰면 되겠죠.ㅎ 


아니면....


if(trim($_GET['name'])) $sql = " name = '" . $_GET['name']. "'";

else $sql = "(1)";

$sql = "SELECT * FROM g5_member WHERE $sql ";

  

이런정도 조건식이면 되겠네요. 수고하세요.

 ​ 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
  • 질문이 없습니다.
전체 0
© SIRSOFT
현재 페이지 제일 처음으로