Prepared Statement 구성 요소
쿼리 분리
SQL 구조 고정SELECT ... WHERE id = ? 형태로 문장 골격을 고정합니다.
값 바인딩사용자 입력은 placeholder에 데이터로 전달합니다.
문법 해석 차단입력 안의 따옴표나 OR가 SQL 구조를 바꾸지 못합니다.
ORM 확인ORM을 쓰더라도 raw query와 문자열 연결은 별도 점검합니다.
Prepared Statement 진행 순서
값 바인딩 순서
SQL template구조 고정
bind value데이터 전달
execute안전 실행
나쁜 패턴
문자열 더하기로 쿼리를 만들면 검증을 해도 우회 가능성이 남습니다.
SELECT * FROM users WHERE id = ?
bind(1, userInput)
execute()