Database 소개 고도몰의 Database 관련 메서드 및 사용법을 를 소개하는 내용입니다.
📌 주요 function
bind_param_push
Copy bind_param_push ( $bindParam , $type , $value )
binding처리를 위한 파라미터를 정의하고 배열형태로 저장합니다.
WHERE 절에 저장될 파라미터 정보 타입인 $type
과 파라미터 값인 $value
를 배열형태의 $bindParam
값으로 저장하여 반환합니다.
query_complete
Copy query_complete ( $isReset )
멤버 변수에 저장했던 쿼리문의 각 요소(field, join, where, group, order. limit)
값에 조건절에 맞는 쿼리문을 추가하여 값을 생성합니다.
bool
타입의 $isReset
파라미터로 사용한 멤버 변수의 리셋 여부를 설정할 수 있습니다.
query_fetch
Copy query_fetch ( $strSQL , array $arrBind , bool $dataArray )
$strSQL
에 쿼리문을 저장하고, binding처리된 파라미터가 저장된 $arrBind
로 쿼리 결과를 출력합니다.
$arrBind
는 반드시 배열타입으로 지정해야 합니다.
bool
타입의 $dataArray
파라미터로 결과 데이터의 배열 타입 출력 여부를 결정합니다.
get_binding
Copy get_binding ( $defaultSetting , $arrData , $dbType , $arrInclude , $arrExclude )
binding 데이터를 배열처리하여 결과를 반환합니다.
$defaultSetting
에는 처리할 테이블의 기본값 배열을 저장하고 $arrInclude
에는 $defaultSetting
에 저장된 기본값 배열에서 사용할 필드명을, $arrExclude
에는 제외할 필드명을 저장합니다. $arrData
에는 처리할 데이터, $dbType
에는 처리 방식(insert|update|select|delete)
을 저장하여 기본값 데이터에서 처리할 데이터를 추출하여 배열형태로 결과를 반환합니다.
set_insert_db
Copy set_insert_db ( $dbTable , $arrTableField , $arrTableValue , $bindChk , $debug )
$dbTable
에 저장할 테이블 명을 넣고 해당 테이블 데이터 필드 정보가 담긴 $arrTableField
와 값 정보가 담긴 $arrTableValue
로 insert 쿼리를 실행합니다.
$bindChk
파라미터에 ‘y’
값을 저장하면 쿼리에 저장되어있는 파라미터를 binding 처리하여 쿼리를 실행합니다.
set_update_db
Copy set_update_db ( $dbTable , $arrTableParam , $strWhere , $arrBindParam , $debug )
$dbTable
에 수정할 테이블 명을 넣고 수정할 테이블의 필드 및 값 정보가 담긴 $arrTableParam
과 WHERE 절이 담긴 $strWhere
, binding처리된 파라미터 배열 값인 $arrBindParam
을 받아 update 쿼리를 실행합니다.
실행 후 update가 적용된 레코드 개수를 반환합니다.
set_delete_db
Copy set_delete_db ( $dbTable , $strWhere , $arrBindParam , $debug )
$dbTable
에 내용을 삭제할 테이블 명을 넣고 WHERE 절이 담긴 $strWhere
, binding처리된 파라미터 배열 값인 $arrBindParam
을 받아 delete 쿼리를 실행합니다.
실행 후 delete가 적용된 레코드 개수를 반환합니다.
bind_query
Copy bind_query ( $strSQL , $arrBind )
쿼리문이 담긴 $strSQL
값과 binding 처리할 파라미터가 담긴 $arrBind
값을 받아 쿼리를 실행합니다.
getCount
Copy getCount ( $tableName , $column , $appendQuery )
해당 테이블의 쿼리 결과에 대한 row count를 반환합니다.
📌 Usage
선언
생성자에서 선언
Copy class MyComponent
{
protected $db = null ;
/**
* 생성자
*/
public function __construct ()
{
$this -> db = \ App :: load ( 'DB' ) ;
}
public function updateData ($arrData)
{
$arrBind = $this -> db -> get_binding ( DBTableField :: tableTestInfo (), $arrData , 'update' ) ;
$this -> db -> bind_param_push ( $arrBind[ 'bind' ] , 'i' , $ arrData [ 'sno' ] ) ;
$this -> db -> set_update_db ( 'es_testTable' , $arrBind[ 'param' ] , 'sno = ?' , $arrBind[ 'bind' ] ) ;
}
}
메소드 내에서 선언
Copy public function selectData ($bdId , $bdSno)
{
$db = \ App :: load ( 'DB' ) ;
$arrBind = [];
$query = sprintf ( " SELECT MIN (sno) FROM %s WHERE field1 = ? AND field2 = ? " , 'es_testTable' ) ;
$db -> bind_param_push ( $arrBind , 's' , $field1 ) ;
$db -> bind_param_push ( $arrBind , 'i' , $field2 ) ;
$result = $db -> query_fetch ( $query , $arrBind , false ) ;
return $result;
}
SELECT
예제 코드 1
Copy $this -> db -> strField = 'field1, field2' ;
$this -> db -> strJoin = ' LEFT JOIN es_testTable AS t1 ON t2.testSno = t1.sno' ;
$this -> db -> strWhere = 't1.field3 = ?' ;
$this -> db -> strOrder = 't1.field DESC' ;
$this -> db -> strLimit = '0, 10' ;
$this -> db -> bind_param_push ( $bindParam , $type , $value ) ;
$query = $this -> db -> query_complete () ;
$strSQL = sprintf ( ' SELECT %s FROM es_testTable1 %s' , array_shift ( $query ), implode ( ' ' , $query )) ;
return $this -> db -> query_fetch ( $strSQL , $bindParam , false ) ;
위와 같이 필드와 조인, WHERE 절, GROUP BY 절, ORDER BY 절, LIMIT 값을 멤버 변수에 설정 한 후에 query_complete()
메소드로 설정한 조건들을 적용시킵니다.
WHERE 절이 있다면 bind_param_push()
메소드로 해당 파라미터를 binding 처리해줍니다.
쿼리문 설정 후, query_fetch()
메소드를 통해 실행 결과를 출력합니다.
예제 코드 2
Copy $strSQL = sprintf ( " SELECT * FROM es_testTable WHERE field = '%s'" , $field ) ;
$data = $this -> db -> query_fetch ( $strSQL , null ) ;
쿼리문 내에 조건절까지 포함하여 쿼리문 변수를 선언한 후에 query_fetch()
메소드로 결과를 반환합니다.
INSERT
예제 코드 1
Copy $arrBind = $this -> db -> get_binding ( $defaultSetting , $arrData , 'insert' ) ;
$this -> db -> set_insert_db ( 'es_testTable' , $arrBind[ 'param' ] , $arrBind[ 'bind' ] , 'y' ) ;
get_binding()
메소드를 통해 INSERT할 테이블 데이터 배열을 가져옵니다.
set_insert_db()
메소드를 통해 get_binding()
메소드로 변환된 배열 값을 해당 테이블에 INSERT 해줍니다.
예제 코드 2
Copy $strSQL = " INSERT INTO es_testTable SET `field1` = ?, `field2` = ?" ;
$this -> db -> bind_param_push ( $arrBind , 'i' , $field1 ) ;
$this -> db -> bind_param_push ( $arrBind , 's' , $field2 ) ;
$this -> db -> bind_query ( $strSQL , $arrBind ) ;
INSERT할 파라미터를 bind_param_push()
메소드로 정의하고 bind_query()
메소드를 통해 쿼리문을 실행합니다.
UPDATE
예제 코드 1
Copy $arrBind = $this -> db -> get_binding ( DBTableField :: testTable (), $arrData , 'update' , $arrInclude ) ;
$this -> db -> bind_param_push ( $arrBind[ 'bind' ] , 's' , $data ) ;
$this -> db -> set_update_db ( 'es_testTable' , $arrBind[ 'param' ] , 'field1 = ?' , $arrBind[ 'bind' ] ) ;
get_binding()
메소드로 수정할 테이블 정보를 배열 형태로 받아온 후, bind_param_push()
로 WHERE 절 파라미터를 정의합니다.
set_update_db()
메소드를 통해 수정합니다.
예제 코드 2
Copy $strSQL = " UPDATE es_testTable SET `field1` = ? WHERE `field2` = ?" ;
$this -> db -> bind_param_push ( $arrBind , 's' , $field1 ) ;
$this -> db -> bind_param_push ( $arrBind , 'i' , $field2 ) ;
$this -> db -> bind_query ( $strSQL , $arrBind ) ;
bind_param_push()
메소드로 WHERE 절 파라미터를 정의 후, bind_query()
메소드로 쿼리문을 실행합니다.
예제 코드 3
Copy $arrBind = $this -> db -> updateBinding ( DBTableField :: testTable (), $arrData ) ;
$this -> db -> bind_param_push ( $arrBind[ 'bind' ] , 'i' , $ arrData [ 'sno' ] ) ;
$this -> db -> set_update_db ( 'es_testTable' , $arrBind[ 'param' ] , 'sno = ?' , $arrBind[ 'bind' ] ) ;
updateBinding()
메소드로 수정할 테이블 배열 값을 받아 온 후 bind_param_push()
메소드로 WHERE 절 파라미터를 정의합니다.
set_update_db()
메소드로 데이터를 수정합니다.
DELETE
예제 코드 1
Copy $this -> db -> bind_param_push ( $arrBind , 's' , $arrData[ 'field1' ] ) ;
$this -> db -> bind_param_push ( $arrBind , 's' , $arrData[ 'field2' ] ) ;
$this -> db -> set_delete_db ( 'es_testTable' , 'field1 = ? AND field2 = ?' , $arrBind ) ;
bind_param_push()
메소드로 삭제할 쿼리의 WHERE 절 파라미터를 정의합니다.
set_delete_db()
메소드로 삭제 쿼리문을 실행하여 WHERE 절 조건과 일치하는 레코드를 삭제합니다.
예제 코드 2
Copy $query = " DELETE FROM es_testTable WHERE field1 = ?" ;
$this -> db -> bind_param_push ( $arrBind , 'i' , $field1 ) ;
$this -> db -> bind_query ( $query , $arrBind ) ;
delete 쿼리를 선언하고 WHERE 절 파라미터를 bind_param_push()
메소드로 정의합니다.
bind_query()
로 쿼리문을 실행하여 WHERE 절에 맞는 레코드를 찾아 삭제합니다.
Transaction
트랜잭션을 이용하기 위해서는, 코드 블럭을 아래와 같이 감싸면 됩니다.
Copy try {
\ DB :: begin_tran () ;
$result = Some :: dbResult () ;
\ DB :: commit () ;
} catch ( Exception $e) {
\ DB :: rollback () ;
}
Closure
를 이용하여 좀더 심플한 코드를 작성할 수 있습니다.
Copy $result = \ DB :: transaction ( function () {
return Some :: dbResult () ;
} ) ;
Last updated 6 months ago