Spac 매뉴얼/MySQL Dao2009. 11. 26. 21:20

이전까지는 쿼리문이 단순해서 조건문이 없었습니다만, 조금 더 세밀한 결과를 얻기 위해선 조건문이 들어가고 해당 조건문에 변수를 이용해 쿼리문을 작성해야 할 경우가 있을것입니다.

쿼리문에 변수를 넣는 방법은 직접 변수를 대입하는 리터럴과 변수가 들어갈 부분에 "?" 나  :VAR 할당하여  쿼리를 만들고 변수 별도로 할당하여 실행하는 바인딩이 있습니다.

일반적으로 바인딩을 사용하는것이 쿼리캐시나 SQL 인젝션 공격 방어 등에 유리하다고 알려져 있습니다.

1. 리터럴

$user_id = 'bidam';
$query = " Select * From member Where user_id = 'bidam' And user_name = '비담' ";
$this->Dao->execute($query);


리터럴은 변수를 쿼리문에 직접 대입하여 작성합니다.


위 쿼리문을 바인딩으로 처리하는 방법은 아래와 같이 두가지 방법이 있습니다.

아래 두 가지 방법은 사용법만 다를 뿐 작동 원리는 같습니다.


2. 바인딩(1)

$query = " Select * From member Where user_id = ? And user_name = ?";

$param = array("bidam","비담");

$this->Dao->execute($query,$param);


3. 바인딩(2)

$query = " Select * From member Where user_id = :user_id And user_name = :user_name";

$param = array("user_id"=>"bidam","user_name"=>"비담");

$this->Dao->execute($query,$param);



위 바인딩 관련 메소드는 Mysql 4.1 이상 버전에서 지원됩니다.



Posted by webdata