Egloos 728x90

구글 애널리틱스


2010/08/30 17:28

[ ibatis ] LIKE 검색하기 ▷ 프로그래밍 관련




  'COLUMN1'이라는 컬럼에서 '학교'라는 단어가 들어가는 녀석들을 검색하고자 한다면,

  WHERE  COLUMN1  LIKE  '%학교%'

  일반적으로 이런 식으로 사용하면 된다. 다른 단어를 검색해야 한다면, 저 학교 부분을 변수로 잡고 입력을 받으면 된다. 문제는 ibatis를 사용할 때.

  ibatis는 보통 변수 표시를 #var# 식으로 하는데, 이게 PrepareStatement 형식으로 바뀌면서 '%?%'가 되어 오류가 발생한다. 이 문제에 대해 검색을 해보면 해결책은 쉽게 찾을 수가 있다.

[iBatis] LIKE 검색 구문 사용하기 ← 해결책 링크


MySQL :
SELECT * FROM tbl_name WHERE column_name LIKE "%$username$%"


ORACLE :
SELECT * FROM tbl_name WHERE column_name LIKE '%' || #username# || '%'


SYBASE/SQL SERVER
SELECT * from tbl_name WHERE column_name LIKE '%' + #username# + '%'



  현재 MySQL 환경에서 작업하고 있기 때문에 MySQL 방법만 알면 되긴 하는데..., 언제든지 다른 DB를 사용하게 될 수 있으니 기억해 두는 것이 좋겠지. 하여튼 MySQL에서는 # 대신 $를 쓰는 간단한 방법으로 해결 가능.

  다만..., 변수 안의 모든 내용이 그대로 입력되므로 보암위험이 높다는 해설이 붙어있다. 무셔!!(본격적으로 MySQL을 사용하는 프로젝트는 이번이 거의 처음이라...)
  차라리 몰랐으면 몰라도 일전에 읽은 해킹 보안 관련 서적에서 저 필드가 그대로 입력될 경우 어떤 식으로 해킹을 하게 되는지 알고 있는지라 이걸 어떻게 해야 하고 있었는데...

  다행히도 아래 덧글들을 읽어보니 concat() 함수를 사용해서 그 문제도 해결할 수 있다고 한다.


  WHERE  COLUMN1  LIKE  CONCAT('%', #keyword#, '%')



  이렇게 concat() 함수를 이용하면 다시 #을 사용해서 PrepareStatement의 효과를 그대로 볼 수 있기 때문에 걱정이 없어진다.


  그럼 $는 알 필요 없는 건가?
  음...어쩌면 사용자에게 입력받는 경우가 아니라 직접 함수를 입력해야 한다던가 같은 상황에서는 활용할 수 있을지도 모르겠다. 일단 기억해놓는 것이 좋을 듯.

덧글

댓글 입력 영역

애드센스336x280

알라딘TTB-Egloos(하단-일반)



이 이글루를 링크한 사람 (블랙)

36