게으른 개발자의 끄적거림

SQL 조건문에 ?

끄적잉 2023. 11. 8. 21:41
728x90

SQL에서 조건문에 `?`가 들어가는 경우, 일반적으로 이것은 SQL 쿼리를 실행할 때 바인딩 매개변수를 나타냅니다. 이것은 주로 프리페어드 스테이트먼트(Prepared Statement)나 파라미터화된 쿼리(Parameterized Query)를 사용할 때 나타납니다. 이러한 기술은 SQL 인젝션 공격을 방지하고 쿼리의 재사용을 용이하게 하기 위한 것입니다.

`?`는 일종의 플레이스홀더로, 나중에 실행 시에 이 위치에 실제 값이 바인딩됩니다. 이러한 파라미터를 사용하면 사용자로부터 입력을 받을 때 보안을 높일 수 있으며, 동일한 쿼리를 여러 번 실행할 때 성능상의 이점도 있습니다.

다음은 `?`를 사용한 SQL 파라미터화된 쿼리의 일반적인 예제입니다:

 

 


```sql
SELECT * FROM employees WHERE department = ? AND salary > ?
```

 


이 쿼리에서 `?`은 두 개의 파라미터를 나타냅니다. 이후에 이 쿼리를 실행할 때, `?` 자리에 실제 값을 바인딩하여 실행합니다. 이때, 바인딩할 값은 데이터베이스 연결 라이브러리나 드라이버를 통해 전달됩니다.

다음은 Python에서 SQLite 데이터베이스를 사용하여 파라미터화된 쿼리를 실행하는 예제입니다:

 

 


```python
import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()

# 파라미터화된 쿼리 실행
department = 'Sales'
salary_threshold = 50000
cursor.execute("SELECT * FROM employees WHERE department = ? AND salary > ?", (department, salary_threshold))

# 결과 가져오기
results = cursor.fetchall()

# 연결 닫기
conn.close()
```

 

 


이렇게 하면 `?` 자리에 전달된 값들이 쿼리에 바인딩되어 실행됩니다. 이는 SQL 인젝션을 방지하고 보안성을 높이는 데 도움을 줍니다.

728x90