티스토리 뷰

 

바인딩 쿼리의 실행

바인딩쿼리는 리터럴과는 다르게 쿼리문에 필요한 변수를 직접 삽입하지 않고 바인딩이라는 과정을 통해 쿼리문을 실행합니다.

바인딩 쿼리는 쿼리문의 반복처리 속도 및 SQL Injection 방어에 도움을 준다고 알려져 있으므로 리터럴 보다는 바인딩쿼리를 사용하시길 권장합니다.

바인딩을 사용할 경우 변수값은 Dao에서 자동으로 escape 시켜주므로 별도로 처리하지 않아도 됩니다.


바인딩 쿼리는 Mysql 4.1 이상 버전에서 지원됩니다.


Spac Dao 에서는 두가지 방식의 바인딩을 제공하는데 그 방식은 아래와 같습니다.

1. "?" 를 통한 바인딩

2. ":변수" 를 통한 바인딩 (Spac 12.2.1 부터 지원합니다.)


위 두가지 바인딩을 예제를 통해 알아보겠습니다.

변수를 직접 삽입해서 구현한 리터럴 쿼리문을 예로 들겠습니다. 아래는 리터럴 쿼리문입니다.

 

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

위 쿼리문은 특정 아이디를 이용해 사용자 정보를 검색하는 예제입니다. 

04 : (Spac 12.2.1 미만의 버전에서는 execute 대신에 exeuteQuery 를 사용합니다.)


 

위 쿼리문을 첫번째 바인딩 쿼리문으로 변경하여 실행해보겠습니다.


1. 첫번째 방식 : "?" 이용

  1. $query = " Select * From member Where user_id = ? And user_name = ?";
  2. $param = array("bidam","비담");
  3. $this->Dao->execute($query,$param);

01 : 변수가 삽입될 부분을 "?"로 대체하여 쿼리문을 작성합니다.

02 : 배열변수에 ? 가 할당된 순서대로  변수를 할당합니다.

03 : 쿼리문을  실행합니다.(Spac 12.2.1 미만의 버전에서는 execute 대신에 exeuteBindingQuery 를 사용합니다.)


2. 두번째 방식 : ":변수" 이용 (Spac 12.2.1 부터 지원합니다.)

  1. $query = " Select * From member Where user_id = :user_id And user_name = :user_name";
  2. $param = array("user_id"=>$user_id,"user_name"=>"비담");
  3. $this->Dao->execute($query,$param);

01 : 변수가 삽입될 부분을 ":변수" 로 대체하여 쿼리문을 작성합니다.

02 : 배열변수에 01라인에서 삽입된 변수명을 가지는 배열값을 할당합니다.

03 : 쿼리문을 실행합니다.

 


개발시 편의를 위하여 두가지 방법을 모두 사용 가능하도록 했으니 용도에 따라 적절히 사용하시기 바랍니다.

(하나의 쿼리문에 두가지 바인당 방식은 혼합되어 사용될수 없으므로 주의 바랍니다.)

 

출처 : http://www.webwork.kr/Manual/viewContents/0/154/12/

 

'공부합시다' 카테고리의 다른 글

드래그 & 드롭 사이트  (0) 2014.04.30
[php] 날짜 계산하기  (0) 2014.03.17
VI 에디터 유니코드(UTF-8)로 인코딩 전환  (2) 2014.03.04
[JS] char형으로 표현하기  (0) 2014.02.10
영문자만 입력되게 하기  (2) 2014.02.06
댓글