https://sir.kr/qa/149890 에 untitled 님이 두 번째 적으신 소스 7라인에서
where (1) 는 어떤 의미인지 궁금합니다.
답변 4개 / 댓글 4개
php의 while(1) { } 하고 같다고 보면 됩니다. 항상 true 가 되어 실행되죠
답변에 대한 댓글 3개
php 에서
if 조건절
실행문
sql 에서
select 실행문 where 조건절
if 문에서 조건절이 없으면 에러가 나듯이
where 에도 조건절이 없으면 에러가 납니다.
보통은 where 1 로 많이 씁니다.
where (1) 또는 where 1 은 true 로 인식되어 select 실행문이 항상 실행되죠
예를 들면 회원검색에서 남자만 검색한다면
$where = " and sex = 'M' "
"select * from table where " +$where;
이런 경우 where and sex = 'M' 이 되어 에러가 나죠
이걸 막기 위해 select 실행문이 항상 실행되면서 에러가 안나도록 하는 겁니다.
"select * from table where 1 " + $where;
조건절이 추가 될수 있는 경우를 대비하여 where (1) 로 했다면 보시면 됩니다.
조건절이 필요없는 경우라면 where 1 을 굳이 넣을 필요가 없지요.
여러분들 덕분에 제 머리가 좋아지고 있어요. 감사합니다. 추석 잘 보내세요.
참고로
Where (1) 은 MySql에서만 유효합니다.
Oracle에서는 관계연산자가 부적합하다고 나옵니다.
다른 DB의 접근에 좀더 유연하게 사용하려면
where ( 1=1)
로 사용하는게 더 좋습니다.
Where (1) 의 방식은
@Rido 님의 의견과 같이
조건에 따라 and 절을 추가할때 유용합니다.
비슷한구문은 GnuBoard 기본엔진에서도 발견할수있습니다.
/bbs/list.php 에서
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
의 문장에 사용된
get_sql_search() 를 살펴보면
중간에 return 0 이 등장합니다.
비교연산자의
1은
PHP / MySql / JavaScript 등에서 '참(true)'로 사용될수있습니다.
0은 '거짓(false)' 로 인식됩니다.
비교연산자에서 1 / 0 의 값을 이용하여 비교하는 구문을 작성하면
코드의 사이즈나 성능개선에 도움이 될겁니다.
답변에 대한 댓글 1개
흠.. 제 경험상으로는 뒤의 where절을 if 문으로
뭔가 검색이 있을경우 없을경우...
where절을 비워둘때 많이 사용하곤 합니다.
답변을 작성하려면 로그인이 필요합니다.