특별한 것은 없습니다. 데이터베이스 연결과 텍스트 캐시를 클래스에 캡슐화하면 됩니다.
- class Db{
- protected $_connect;
- protected $_db = Array();
- protected $_cache = Array();
-
- 공용 함수 __construct($args){
- list($this->_db,$this->_cache) = $args;
- }
- 보호 함수 connect($db){
- $ this->_connect = mysql_connect($db['hostname'],$db['username'],$db['password']);
- mysql_set_charset('UTF8');
- mysql_select_db($db ['databasename'],$this->_connect);
- }
- /**
- *기능: 테이블의 데이터를 가져와서 형식화하고 쿼리된 데이터를 반환합니다. 반환 형식은 배열 형식입니다!
- *$sql: 실행될 들어오는 SQL 문은 SELECT여야 하며 SELECT만 가능합니다.
- *
- */
- 공개 함수 fetch($sql){
- $result = '';
- if(isset($this->_cache['expire'])){
- $name = md5(strtolower(str_replace(' ','',$sql)));
- $dir = substr($name,0,2);
- $dir = $this->_cache['dir'].'/'.$dir;
- !is_dir($dir) && mkdir($dir, 0777);
- !is_dir($dir) && mkdir($dir,0777);
- $this->_cache['path'] = $dir.'/'.$name;
- if (is_file($this->_cache['path']) && $this->check_expire()){
- $result = $this->get();
- }
- }
- if($result == ''){
- $data = $this->exec($sql);
- $result = Array();
- while($result[] = mysql_fetch_array ($data,MYSQL_ASSOC)){} //인덱스 제거
- mysql_free_result($data);
- array_pop($result);
- isset($this->_cache['expire']) && $ this->write($result);
- }
- return $result;
- }
- /**
- *기능: SELECT를 제외한 모든 SQL문을 실행합니다!
- *$sql: 실행하려는 SQL 문을 SELECT할 수 없습니다.
- *반환값: TRUE OR FALSE
- */
- 공용 함수 exec($sql){
- if($this->_connect === null) $this->connect($this->_db) //데이터 링크 수행
- if( $result = mysql_query($sql, $this-> ;_connect) ){
- return $result;
- }else{
- die("{$sql}
실행 오류: " . mysql_error());
- }
- }
- /**
- *기능: 데이터베이스 삽입문 실행, INSERT문만 가능!
- *$v : 실행할 들어오는 조건은 삽입할 테이블을 나타내는 배열형식의 테이블이고, row는 필드, value는 삽입할 값
- *반환값 : mysql_insert_id() OR FALSE
- */
- 공용 함수 insert($table,$field,$ignore = 0){
- $D = Array('field'=>'','val'=>'') ;
- foreach($field AS $key => $v){
- $D['field'] .= $key.',';
- $D['val'] .= " '{ $this->escape($v)}',";
- }
- $D['field'] = rtrim($D['field'],',');
- $D ['val'] = rtrim($D['val'],',');
- $ignore = $ignore > 0 ? 'IGNORE' : '';
- $sql = "INSERT {$ 무시} INTO {$this->_db['perfix']}{$table}({$D['field']}) VALUES({$D['val']})";
- if( $this->exec($sql)){
- $insert_id = mysql_insert_id();
- return is_numeric($insert_id) ? $insert_id : TRUE;
- }else{
- FALSE 반환 ;
- }
- }
- 공개 함수 업데이트($table,$field){
- $D = Array('where'=>'','str'=>'');
- $index = 0;
- foreach($field AS $key => $v){
- $index == 0 $D['where'] = "{$key} = '{ $this ->escape($v)}'" : $D['str'] .= "{$key} = '{$this->escape($v)}',";
- $ 인덱스
- }
- $D['str'] = rtrim($D['str'],',');
- $sql = "UPDATE {$this->_db['perfix '] }{$table} SET {$D['str']} WHERE {$D['where']}";
- return $this->exec($sql);
-
- }
- 공용 함수 삭제($table,$field){
- $str = '';
- foreach($field AS $key => $v){
- $str = "{$ key} = '{$v}'";
- }
- $sql = 'DELETE FROM '.$this->_db['perfix'].$table.' WHERE '.$str.' 1' ;
- return $this->exec($sql);
- }
- 공개 함수 sum($table,$condition){
- $totle = $this->fetch(' SELECT COUNT (*) AS totle FROM '.$this->_db['perfix'].$table.' WHERE '.$condition);
- return $totle[0]['totle'];
- }
- /**
- *기능: 입력 특수문자 필터링
- *$v: 감지를 위해 전달할 매개변수
- *반환값: 감지된 매개변수
- */
- 공용 함수 escape($v){
- return mysql_real_escape_string($v);
- }
- /*
- *기능: 수행 캐시 판단
- */
- 공용 함수 캐시($name,$expire=100000000){
- $this->_cache['expire'] = $expire;
- return $this;
- }
- 공개 함수 check_expire(){
- return (filemtime($this->_cache['path']) $this->_cache['expire']) > ;
- }
-
- 공용 함수 쓰기($data){
- $f = fopen($this->_cache['path'], 'w');
- if ($ f) {
- 무리($f, LOCK_EX);
- fseek($f, 0);
- ftruncate($f, 0);
- $tmp = fwrite($f, serialize($ data) );
- if (!($tmp === false)) {
- $result = true;
- }
- fclose($f);
- }
- chmod( $this ->_cache['path'],0777);
- }
- 공개 함수 get(){
- $f = fopen($this->_cache['path'], 'r ') ;
- $data = fread($f,filesize($this->_cache['path']));
- fclose($f);
- return unserialize($data);
- }
- 공용 함수 delete_dir($dir = ''){
- $dir = 비어 있음($dir) ? $this->_cache['dir'] : $dir;
- !is_dir( $dir ) && 종료;
- $d = opendir($dir);
- $i = 0;
- while(($file = readdir($d)) !== false){
- $path = $dir.'/'.$file;
- if($i > 1) is_file($path) ? unlink($path) : $this->delete_dir($path);
- $i ;
- }
- closeir($d);
- rmdir($dir);
- }
- 공개 함수 __destruct(){
- isset($this->_connect) && mysql_close ($this->_connect);
- }
- }
코드 복사
|