CI 묻고 답하기

제목 [완료] CI 에서 WHERE절에 공백을 체크하려 한다면 ~?
글쓴이 수야디벨 작성시각 2015/03/23 14:49:52
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 17278   RSS
안녕하세요. 질문드립니다 ~

$this->db->query("SELECT * FROM table WHERE `table`.`title` != '&엔비sp' "); 를 올바르게 쿼리 조회 하려면
추가적으로 어떤 조치를 해야 할까요?

그냥 &엔bsp로 입력하면 조회되는 쿼리가 
SELECT * FROM table WHERE `table`.`title` != ''  이렇게 되는데 ,

실제로 컬럼에 &엔bsp가 들어가 있는 상황이라서 이를 걸러줘야 하는데.. 안되네요 ..ㅠㅋ

조언 부탁드립니다 ~ 
 다음글 ci 3.0에서 tank_auth (3)
 이전글 파일 업로드 시 첨부 파일이 없어도 업로드 되게할 수 ... (6)

댓글

변종원(웅파) / 2015/03/23 15:31:37 / 추천 0
두번째나 세번째 파라미터(액티브레코드 함수 종류에 따라)로 false를 주게되면 escape처리를 안합니다. 

또는 mysql에서는 null 이라는 구문을 이용합니다.
수야디벨 / 2015/03/23 16:39:03 / 추천 0
변종원// 

ㅎㅎ 답변감사합니다.

이스케이프에 대해서는 평소에 알고 있어서 , 이미 적용도 해보고 시도도 해봤는데 

case1 )

$this->db->where('title !=' ,'&엔bsp', false); 하면 쿼리 오류가 납니다.

오류 원인은 select * from table title !=    이래서..  즉 title != '' 이렇게 되어야 하는데 이스케이프 처리하면 title !=  이렇게만 나옵니다.

그래서 ..

$this->db->where('title !=', "  '&엔bsp' " , false);

라고하면 오류는 안나나 , &엔bsp가 걸러지지는 않습니다. 쿼리가 '' 이런식으로 빈것이 나와서..
case2 )

$this->db->query("select * from table title != '&엔bsp' ",false); 

이역시 위와 같은 오류가 나옵니다.

제가 잘못이해하고 있는걸까요?
변종원(웅파) / 2015/03/23 16:54:26 / 추천 0
그럼 두번째 답변으로 사용하셔야 합니다.

http://egloos.zum.com/heavening/v/1379558
한대승(불의회상) / 2015/03/23 17:03:03 / 추천 0
그냥 or 로 묶으면 안되나요?
$this->db->where("title != '&엔bsp' or title != ''");
변종원(웅파) / 2015/03/23 22:47:14 / 추천 0
제가 질문을 잘못 이해했네요. ㅎㅎ
 
SELECT * FROM people.`a_people` WHERE `name` LIKE ("% %")
 
SELECT * FROM people.`a_people` WHERE `name` NOT LIKE ("% %")

요런 방법도 있네요
ci세상 / 2015/03/23 23:01:33 / 추천 0
$query = $this->db->query(" SELECT * FROM member WHERE id != ' ' ");
foreach ($query->result_array() as $row)
{
   echo $row['id'];
}
쿼리가 정상작동해야 맞는것 같은데요 ~
안되시면 디비툴로 해당 쿼리가 먹히는지 해보시고~

replace (title,' ',' ') 이렇게도 함 해보세요~

 
수야디벨 / 2015/03/24 10:18:34 / 추천 0
모두 답변감사드립니다 !

일단 웅파님이 알려주신 LIKE 문으로 걸러서 해결했습니다. ㅠ

도통 일반 액티브 쿼리로는 걸러지지가 않네요 ;;; 

CI 세상님이 알려주신   리플레이스도 생각해 보았습니다만, 

개발 상황상 웅파님이 알려주신 방법이 적절하다 판단되어 해결했습니다.

답변 감사드립니다 ^^