PDO bindParam 과 bindValue 의 차이

메뉴얼에 설명이 있긴 한데 좀 글로 이해하려니 저는 좀 어려웠습니다. 스택오버플로에서 아래 예제를 보니 좀 이해가 되더군요.

$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
}

좀 심하게 아쉬운 네이버 검색결과…

PHP 의존성 관리 도구인 Composer 와 Composer 의 기본 저장소인 Packagist 는 PHP 개발자들에게 필수가 되어가고 있습니다. PHP 개발하면서 가장 먼저 라이브러리를 검색하러 가는 곳이 바로 Packagist 인데요, 우연히 네이버에서 packagist 를 검색해보고 정말 깜짝 놀랐습니다. 네이버 검색엔진은 packagist 라는 사이트의 존재를 모르는 것 같아요.

스크린샷 2015-03-23 22.39.08

php composer 로 검색해도 웹사이트 검색은 아예 나오지도 않고 블로그 글들이 상위에 노출되고 있습니다. 지식in에는 심지어 베토벤도 나옵니다. 그냥 composer 아니고 php composer 로 검색했는데 베토벤이라니… 좀 심한거 같아요.

스크린샷 2015-03-23 22.56.00

PHP가 아무리 국내에서 인기없는 개발언어라고는 해도, 한 개발언어의 핵심 도구의 홈페이지 정도는 사이트로서 검색되어야 하지 않을까요? 제가 너무 많은 걸 바라는걸까요? ㅎㅎ

[대놓고 광고] 모던PHP에 관심 있으신 분들은 페이스북 모던 PHP 유저 그룹으로 놀러오세요. 🙂