티스토리 뷰

반응형

`$stmh = $pdo->prepare($sql);`와 `$stmh = $pdo->query($sql);` 사이에는 중요한 차이점이 있습니다. 이들은 PHP의 PDO (PHP Data Objects) 확장에서 제공하는 두 가지 다른 방법으로, 데이터베이스와의 상호작용을 처리합니다.



1. **`$pdo->prepare($sql);` 사용:**
   - `prepare()` 메서드는 SQL 문을 준비하고 PDOStatement 객체를 반환합니다. 이 메서드는 SQL 문에서 변수를 바인딩하기 위해 사용됩니다. 
   - `prepare()`는 주로 변수가 포함된 SQL 문에서 사용됩니다. 예를 들어, 사용자 입력을 포함하는 경우 이 방법을 사용하여 SQL 인젝션과 같은 보안 취약점을 방지할 수 있습니다.
   - `prepare()` 후에는 `bindParam()` 또는 `bindValue()` 메서드를 사용하여 변수를 SQL 문에 바인딩한 다음 `execute()` 메서드를 호출하여 쿼리를 실행합니다.
   - 이 방법은 특히 같은 쿼리를 여러 번 실행해야 할 때 효율적입니다.

2. **`$pdo->query($sql);` 사용:**
   - `query()` 메서드는 SQL 문을 바로 실행하고 결과로 PDOStatement 객체를 반환합니다.
   - 이 메서드는 변수 바인딩이 필요 없는 간단한 쿼리에 적합합니다. 예를 들어, 정적인 `SELECT` 쿼리나 `UPDATE`, `INSERT`, `DELETE` 쿼리에서 사용할 수 있습니다.
   - `query()`는 SQL 인젝션 보호 기능을 제공하지 않으므로 사용자 입력을 포함하는 쿼리에는 적합하지 않습니다.
   - `query()`는 쿼리를 한 번만 실행할 때 일반적으로 사용됩니다.

간단히 말해서, `prepare()`와 `execute()`의 조합은 보안과 재사용성 측면에서 우수하지만, `query()`는 간단하고 정적인 쿼리를 빠르게 실행하는 데 유용합니다. 사용자 입력을 포함하는 경우나 복잡한 동적 쿼리를 실행할 때는 `prepare()` 메서드를 사용하는 것이 좋습니다.

반응형
댓글