2009. 9. 16. 16:26

mysql 처리용 함수 및 클래스


<?
define('YSDB_FETCH_ROW',0);
define('YSDB_FETCH_COL',1);

/**
 * 디비 처리함수
 *
 * @param text $sql
 * @return integer/text/array/FALSE
 */
function query($sql,$dbRes=NULL,$mode=0) {
 $sql = trim($sql);

 if($dbRes == NULL)
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql);
 else 
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$dbRes);
  
 if($result === FALSE) 
  return FALSE;
 
 $tmp = strtoupper(substr($sql,0,3));
 if($tmp == 'DEL' || $tmp == 'UDP') {
  //delete,update 쿼리는 수정/삭제된 행의 수를 리턴
  $row = mysql_affected_rows();
  if($row != '-1') 
   return $row;
 }
 elseif($tmp == 'INS') {
  $rtn = mysql_affected_rows();
  if($rtn > 1) //여러개의 열이 영향을 받은경우 그값을 리턴
   return $rtn;
  else //insert 쿼리는 등록된 primary key 리턴
   return mysql_insert_id();
 }
 elseif($tmp == 'SEL') {
  if($mode) {
   while ($row = mysql_fetch_assoc($result)) {
    foreach ($row as $key => $value){
     $rtn[$key][] = $value;
    }
   } 
  }
  else {
   $rtn = array();
   while($row=mysql_fetch_assoc($result)) {
    array_push($rtn,$row);
   }
  }
  mysql_free_result($result);
  return $rtn;
 }
}

function queryRow($sql,$dbRes=NULL) {
 $sql = trim($sql);

 if($dbRes == NULL)
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql);
 else 
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$dbRes);
  
 if($result === FALSE) 
  return FALSE;
 
 return mysql_fetch_assoc($result);
}

function queryOne($sql,$dbRes=NULL) {
 $sql = trim($sql);

 if($dbRes == NULL)
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql);
 else 
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$dbRes);
  
 if($result === FALSE) 
  return FALSE;
 
 return @mysql_result($result,0,0);
}

--------------------------------------------------------------------------------------------------


class DBCon {
 /**
  * 기본 웹디비 연결
  * 다른 디비로 연결하려면 상속받은 객체에 
  * 오버라이딩 해서 쓰세요.
  */
 var $mHost = '';
 var $mUser = '';
 var $mPassword = '';
 var $mDB = '';
  
 /**
  * 데이타베이스 연결 리소스
  */
 var $mDbCon = NULL;
 
 /**
  * 문자서버 연결상태
  */
 var $mState = FALSE;
 
 /**
  * 데이타베이스 연결
  * PHP4 생성자는 존재하나 소멸자를 지원하지 않아 생성자로 연결시
  * 과도한 연결이 발생할 수 있으므로 open(),close() 를 명확하게 설정
  */
 function open() {
  if($this->mState) return TRUE;
  
  $this->mDbCon = mysql_connect($this->mHost, $this->mUser, $this->mPassword);
  if($this->mDbCon) {
   mysql_select_db($this->mDB, $this->mDbCon);
   $this->mState = TRUE;
   
   return TRUE;
  }
  
  return FALSE;
 }
 
 /**
  * 데이타베이스 연결을 종료
  *
  */
 function close() {
  if(!$this->mState) return TRUE; 
  
  if(mysql_close($this->mDbCon)) {
   unset($this->mDbCon);
   $this->mState = FALSE;
   return TRUE;
  }
  else
   return FALSE;
 }
 
 /**
  * 데이타베이스 연결 상태를 리턴
  *
  * @return TRUE/FALSE
  */
 function getConnectState() {
  return $this->mState;
 } 
 
 /**
  * mysql 연결 반환
  *
  * @return resource
  */
 function getDbCon() {
  return $this->mDbCon;
 }
 
 /**
  * 외부 mysql 연결
  *
  * @param resource $dbcon
  */
 function setDbCon($dbcon) {
  if(!is_resource($dbcon))
   exit('Error : $dbcon IS NOT RESOURCE ');
  
  $this->mDbCon = $dbcon;
  $this->mState = TRUE;
 } 
 
 /**
  * 데이타베이스에 쿼리를 실행
  * 쿼리에 따라 결과를 다르게 리턴합니다.
  *
  * @param text $sql
  * @return array/text/FALSE
  */
 function query($sql,$opt = YSDB_FETCH_ROW) {
  if($this->mState === FALSE) $this->open();
  
  $sql = trim($sql);
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$this->mDbCon);
  if($result === FALSE) {
   echo mysql_error($this->mDbCon);
   return FALSE;
  }

  $tmp = strtoupper(substr($sql,0,3));
  if($tmp == 'DEL' || $tmp == 'UPD') {
   $row = mysql_affected_rows($this->mDbCon);
   if($row != '-1') 
    return $row;
  }
  elseif($tmp == 'INS') {
   $rtn = mysql_affected_rows($this->mDbCon);
   if($rtn > 1)
    return $trn;
   else
    return mysql_insert_id($this->mDbCon);
  }
  elseif($tmp == 'SEL') {
   $rtn = array();
   if($opt == YSDB_FETCH_COL) {
    while ($row = mysql_fetch_assoc($result)) {
     foreach ($row as $key => $value){
      $rtn[$key][] = $value;
     }
    }
   }
   else {
    while($row=mysql_fetch_assoc($result)) {
     array_push($rtn,$row);
    }
   }
   mysql_free_result($result);
   return $rtn;
  }
 }
 
 /**
  * 쿼리 실행후 한개의 레코드만 리턴
  *
  * @param text $sql
  * @return array
  */
 function queryRow($sql) {
  if($this->mState === FALSE) $this->open();

  $sql = trim($sql);
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$this->mDbCon);

  if($result === FALSE) {
   echo mysql_error($this->mDbCon);
   return FALSE;
  }
  
  return mysql_fetch_assoc($result);
 }
 
 /**
  * 쿼리 실행후 하나의 필드만 리턴
  *
  * @param unknown_type $sql
  * @return unknown
  */
 function queryOne($sql) {
  if($this->mState === FALSE) $this->open();
  
  $sql = trim($sql);
  $result = mysql_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$this->mDbCon);
   
  if($result === FALSE) {
   echo mysql_error($this->mDbCon);
   return FALSE;
  }
  
  return @mysql_result($result,0,0);
 } 
 
 /**
  * db 비용 절약용 쿼리
  * 주의:쿼리 실행후 완료를 기다리지 않고 다음 쿼리가 실행 되는 점 주의(연속 쿼리시 문제 발생)
  *
  * @param text $sql
  * @return bool
  */
 function queryUnbuf($sql) {
  if($this->mState === FALSE) $this->open();
  
  $sql = trim($sql); 
  $result = mysql_unbuffered_query("/*".$_SERVER['REMOTE_ADDR']."*/ ".$sql,$this->mDbCon);
   
  if($result === FALSE) 
   return FALSE;
  else 
   return TRUE;
 }
} 

?>