Developer
like문 작성법
rocksea
2012. 10. 10. 15:15
LIKE 구문 사용 시 '%' 기호를 사용할 경우 PrepareStatement 타입으로 변환되면서 오류가 발생한다.
아래와같을 경우 더블쿼테이션까지 포함되어 치환되기 때문에 SQLException이 발생한다.
iBatis
WHERE name LIKE "#str#%"
MyBatis
- WHERE name LIKE "%#{str}%"
이를 해결하는 방법은 #기호 대신 $ 기호를 사용하면 되는데 $ 기호의 경우 변수명이 그대로 노출되기 때문에
SQL 인젝션 공격을 당할 위험이 있다.
그래서 다른 방법은 RDBMS에서 지원하는 문자열 함수를 이용하여 #{str}% 형태로 조합하는 것이다.
Oracle : WHERE name LIKE ‘%’ || #{str} || ‘%’
MySQL : WHERE name LIKE CONCAT(‘%’, #{str}, ‘%’)
.by rocksea