메뉴얼에 설명이 있긴 한데 좀 글로 이해하려니 저는 좀 어려웠습니다. 스택오버플로에서 아래 예제를 보니 좀 이해가 되더군요.
$sex = 'male'; $stmt = $db->prepare('SELECT name FROM students WHERE sex = :sex'); $stmt->bindParam(':sex', $sex); // 변수에 바인딩하기 위해 bindParam을 사용 $sex = 'female'; $stmt->execute(); // WHERE sex = 'female' 로 실행됩니다.
bindParam은 레퍼런스를 바인딩한거라 바인딩 한 이후에 값을 변경할 수 있습니다. 반면 bindValue는 값 자체를 바인딩합니다. 그래서 아래와 같이 변수에 새로운 값을 넣어도 반영되지 않습니다.
$sex = 'male'; $stmt = $db->prepare('SELECT name FROM students WHERE sex = :sex'); $stmt->bindValue(':sex', $sex); // 변수값에 바인딩하기 위해 bindValue를 사용 $sex = 'female'; $stmt->execute(); // WHERE sex = 'male' 로 실행됩니다.
파라미터 값만 계속 변경되는 반복작업을 처리할 때는 bindParam 으로 하는게 더 좋을 수 있다고 합니다. 자세히는 모르지만 데이터베이스에서 더 효율적으로 처리한다는 것 같아요.
$stmt = $db->prepare('SELECT name FROM students WHERE id = :id'); $stmt->bindParam(':id', $id); foreach($ids as $id) { $stmt->execute(); //do something else }