2009. 9. 16. 16:26
mysql 처리용 함수 및 클래스
2009. 9. 16. 16:26 in 자작소스/PHP
<? 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; } } ?>