PHP

36. PHP PDO의 bindParam과 bindValue의 차이

drizzle0925 2021. 8. 5. 15:30
728x90

PDO(PHP Data Objects)에서 Prepared statements 사용 시 값을 bind 하기 위해 PDOStatement::bindParam 또는 PDOStatement::bindValue를 주로 사용합니다.

두 개의 함수는 사용법이 거의 유사해서 어떤 차이가 있는지 헷갈려서 정리해봅니다.

 

아래의 예시를 보면 정확한 차이를 바로 알 수 있습니다.

bindParam

<?php
$sex = 'male';
$stmt = $db->prepare('SELECT name FROM students WHERE sex = :sex');
$stmt->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$stmt->execute(); // executed with WHERE sex = 'female'
?>

 

bindValue

<?php
$sex = 'male';
$stmt = $db->prepare('SELECT name FROM students WHERE sex = :sex');
$stmt->bindValue(':sex', $sex); // use bindValue to bind the variable's value
$sex = 'female';
$stmt->execute(); // executed with WHERE sex = 'male'
?>

 

결론은 PDOStatement::bindParam은 변수의 레퍼런스로 바인딩되므로 PDOStatement::execute가 호출될 때 값이 반영됩니다.

 

 

bindParam은 execute()가 실행되기 적전의 변수를 할당합니다.

bindValue는 bindValue함수가 실행된 시점에서 담겨져있는 변수를 전달합니다.

728x90