mysql 검색 필터링

mysql 검색 필터링

QA

mysql 검색 필터링

본문

$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 ";

  

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

 ​ 

답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT