1. Query 구문 분석을 1회만 수행
2. 매개 변수만 전달하기 때문에 서버 대역폭 최소화
3. SQL Injection 공격을 막아줌
인젝션은 공격자가 신뢰할 수 없는 입력을 프로그램에 주입하도록 하는 공격을 의미함
이를 통해 해당 프로그램의 실행 과정의 변경을 유도하거나 공격자의 변결 질의를 통해 결과값을 다르게 나오도록 할 수 있음
<?php
include "db.php";
try{
// 데이터베이스에 쿼리를 보내기 전에 쿼리를 준비 이 때, 쿼리에 사용되는 값은 :placeholder와 같은 형태로 지정
$stmt = $conn->prepare("INSERT INTO myguest (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
// placeholder에 값을 바인딩, 값이 쿼리에 직접 들어가는게 아니라 바인딩된 값을 통해 쿼리가 실행
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "jolie@example.com";
// 바인딩된 값을 사용하여 쿼리 실행
$stmt->execute();
} catch (PDOException $e) {
echo $e->getMessage();
}
$conn = null;