본문 바로가기
개발/PHP

mysqli 클래스의 prepare, bind_param, bind_result, execute 효과내기

by GetLight 2010. 6. 2.
php.net 에서 제공한 샘플 코드

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>



따라하기(흉내내기)
<?php

class dbMySqli extends mysqli implements dbSwitch
{

    # @ interface : bindParamsResult
    # ("SELECT * FROM `TABLE` WHERE name=':1' and age=':2'",array('php',26));
    # ("INSERT `TABLE` (name,age) VALUES (':a',':b')",array('ajax',27));
    # ("DELETE FROM `TABLE` WHERE name=':A' and age=':B'",array('ax',28));
    public function bindParams($query,$args=array()){
        if(strpos($query,':') !==false){
            preg_match_all("/(\:[a-zA-Z0-9])/s",$query,$matches);
            if(is_array($matches)){
                foreach($matches[0] as $n => $s){
                    $query = str_replace($s,$args[$n],$query);
                }
            }
        }
    return $query;
    }

}


## 사용방법 (영문 대소문자 , 숫자 어떤거든 상관없음 중복되면 안됨)
@숫자
$mysqli->bindParams("SELECT * FROM `TABLE` WHERE name=':1' and age=':2'",array('나당',27));
);

@영문 소문자
$mysqli->bindParams("SELECT * FROM `TABLE` WHERE name=':a' and age=':b'",array('나당',27));
);


@ 영문 대문자
$mysqli->bindParams("SELECT * FROM `TABLE` WHERE name=':1' and age=':2'",array('나당',27));
);


@ 숫자,영문
$mysqli->bindParams("SELECT * FROM `TABLE` WHERE name=':1' and age=':a'",array('나당',27));
);

'개발 > PHP' 카테고리의 다른 글

Agavi를 사용하여 REST API 작성하기  (0) 2010.06.18
mysqli-stmt  (0) 2010.06.02
mysqli 활용한 SQL Injection 예방  (0) 2010.06.02
PHP로 MVC구현_제2회  (0) 2010.06.01
웹(PHP) 개발에 유용(필요)한 유틸  (0) 2010.06.01