SQL 파라미터 바인더
브라우저 처리SQL의 :이름 자리표시자에 값을 넣어 실제 실행할 쿼리를 만듭니다. 문자열·주석·::캐스트 안은 건드리지 않고, 값이 없는 자리와 쓰이지 않은 값을 끝에 알려 줍니다.
- 파일·이미지·문서 처리 도구는 브라우저 안에서 처리되더라도 원본에 개인정보나 민감 정보가 포함될 수 있습니다. 공유·제출 전 원본과 결과를 한 번 더 확인하세요.
애플리케이션 로그에는 WHERE category = :category처럼 자리표시자가 남은 쿼리와 값이 따로 찍히는 경우가 많습니다. 이 도구는 두 번째 칸에 적은 이름=값을 각 :이름 자리에 넣어 DB 도구에서 바로 실행해 볼 수 있는 쿼리를 만듭니다.
SELECT * FROM tools WHERE category = 'dev' AND score >= 80 AND note <> 'a:b'; -- 바인딩: category, score · 값 없음: 없음 · 쓰이지 않은 값: 없음
SQL 파라미터 바인더 사용 가이드
애플리케이션 로그에는 WHERE category = :category처럼 자리표시자가 남은 쿼리와 값이 따로 찍히는 경우가 많습니다. 이 도구는 두 번째 칸에 적은 이름=값을 각 :이름 자리에 넣어 DB 도구에서 바로 실행해 볼 수 있는 쿼리를 만듭니다.
자리표시자는 SQL 문법을 따라 찾습니다. 'a:b' 같은 문자열 안, -- 와 /* */ 주석 안, PostgreSQL의 ::text 캐스트는 자리표시자로 보지 않으므로 엉뚱한 곳이 바뀌어 쿼리가 깨지지 않습니다.
숫자는 따옴표 없이, true·false·null은 TRUE·FALSE·NULL로, 나머지는 작은따옴표로 감싸 넣고 값 속 작은따옴표는 두 번 씁니다. 007처럼 문자열로 남겨야 하는 값은 '007'로 적으면 됩니다. 결과 끝의 주석 줄에 넣은 값, 값이 없는 자리, 쓰이지 않은 값이 정리됩니다.
사용 방법
- 'SQL' 칸에 :이름 자리표시자가 있는 쿼리를 붙여 넣습니다.
- '값' 칸에 category=dev처럼 이름=값을 한 줄에 하나씩 적습니다. 문자열로 남길 숫자는 따옴표로 감쌉니다.
- '실행'을 누르고 끝의 '-- 바인딩 · 값 없음 · 쓰이지 않은 값' 줄로 빠진 값이 없는지 확인합니다.
예시: 로그에 찍힌 쿼리 재현
SELECT * FROM tools WHERE category = :category AND score >= :score AND note <> 'a:b'; --- category=dev score=80
SELECT * FROM tools WHERE category = 'dev' AND score >= 80 AND note <> 'a:b'; -- 바인딩: category, score · 값 없음: 없음 · 쓰이지 않은 값: 없음
문자열 'a:b' 안의 :b는 자리표시자로 보지 않아 그대로 남았습니다.
이럴 때 쓰면 좋아요
- 애플리케이션 로그의 쿼리와 파라미터를 합쳐 DB 콘솔에서 다시 실행할 때
- 느린 쿼리를 실제 값으로 바꿔 EXPLAIN으로 실행 계획을 볼 때
- 버그 리포트에 재현 가능한 완성 쿼리를 첨부할 때
- MyBatis·JPA 등의 이름 있는 파라미터 쿼리를 수동으로 시험할 때
문제가 생겼을 때
값 칸의 줄에 = 이 없습니다. category=dev처럼 이름과 값을 =로 이어 한 줄에 하나씩 적으세요. 이름 앞의 :는 있어도 됩니다.
= :x 자리에 NULL이 들어가면 col = NULL이 되어 항상 거짓입니다. 이 경우 쿼리를 col IS NULL로 바꿔야 합니다.
활용 팁
- ?나 $1 같은 순번 자리표시자는 바꾸지 않습니다. 이름 있는 :name 형식만 처리합니다.
- 만든 쿼리는 실제 값이 문자열로 들어간 것이므로 운영 코드에 그대로 쓰지 말고 확인용으로만 쓰세요. 코드에서는 바인딩을 유지해야 SQL 인젝션을 막을 수 있습니다.
자주 묻는 질문
모든 자리에 같은 값이 들어갑니다. :id가 세 번 나오면 세 곳 모두 같은 값으로 바뀝니다.
2026-10-01처럼 적으면 '2026-10-01' 문자열로 들어갑니다. 대부분의 DB는 날짜 컬럼과 비교할 때 이 형식을 날짜로 바꿔 읽습니다.
아니요. @로 시작하는 이름은 DB 변수와 겹칠 수 있어 건드리지 않습니다. :이름 형식으로 바꾼 뒤 넣으세요.