>  기사  >  백엔드 개발  >  데이터베이스 연결 및 텍스트 캐싱을 위한 간단하고 포괄적인 클래스

데이터베이스 연결 및 텍스트 캐싱을 위한 간단하고 포괄적인 클래스

WBOY
WBOY원래의
2016-07-25 08:49:36870검색
특별한 것은 없습니다. 데이터베이스 연결과 텍스트 캐시를 클래스에 캡슐화하면 됩니다.
  1. class Db{
  2. protected $_connect;
  3. protected $_db = Array();
  4. protected $_cache = Array();
  5. 공용 함수 __construct($args){
  6. list($this->_db,$this->_cache) = $args;
  7. }
  8. 보호 함수 connect($db){
  9. $ this->_connect = mysql_connect($db['hostname'],$db['username'],$db['password']);
  10. mysql_set_charset('UTF8');
  11. mysql_select_db($db ['databasename'],$this->_connect);
  12. }
  13. /**
  14. *기능: 테이블의 데이터를 가져와서 형식화하고 쿼리된 데이터를 반환합니다. 반환 형식은 배열 형식입니다!
  15. *$sql: 실행될 들어오는 SQL 문은 SELECT여야 하며 SELECT만 가능합니다.
  16. *
  17. */
  18. 공개 함수 fetch($sql){
  19. $result = '';
  20. if(isset($this->_cache['expire'])){
  21. $name = md5(strtolower(str_replace(' ','',$sql)));
  22. $dir = substr($name,0,2);
  23. $dir = $this->_cache['dir'].'/'.$dir;
  24. !is_dir($dir) && mkdir($dir, 0777);
  25. !is_dir($dir) && mkdir($dir,0777);
  26. $this->_cache['path'] = $dir.'/'.$name;
  27. if (is_file($this->_cache['path']) && $this->check_expire()){
  28. $result = $this->get();
  29. }
  30. }
  31. if($result == ''){
  32. $data = $this->exec($sql);
  33. $result = Array();
  34. while($result[] = mysql_fetch_array ($data,MYSQL_ASSOC)){} //인덱스 제거
  35. mysql_free_result($data);
  36. array_pop($result);
  37. isset($this->_cache['expire']) && $ this->write($result);
  38. }
  39. return $result;
  40. }
  41. /**
  42. *기능: SELECT를 제외한 모든 SQL문을 실행합니다!
  43. *$sql: 실행하려는 SQL 문을 SELECT할 수 없습니다.
  44. *반환값: TRUE OR FALSE
  45. */
  46. 공용 함수 exec($sql){
  47. if($this->_connect === null) $this->connect($this->_db) //데이터 링크 수행
  48. if( $result = mysql_query($sql, $this-> ;_connect) ){
  49. return $result;
  50. }else{
  51. die("{$sql}
    실행 오류: " . mysql_error());
  52. }
  53. }
  54. /**
  55. *기능: 데이터베이스 삽입문 실행, INSERT문만 가능!
  56. *$v : 실행할 들어오는 조건은 삽입할 테이블을 나타내는 배열형식의 테이블이고, row는 필드, value는 삽입할 값
  57. *반환값 : mysql_insert_id() OR FALSE
  58. */
  59. 공용 함수 insert($table,$field,$ignore = 0){
  60. $D = Array('field'=>'','val'=>'') ;
  61. foreach($field AS $key => $v){
  62. $D['field'] .= $key.',';
  63. $D['val'] .= " '{ $this->escape($v)}',";
  64. }
  65. $D['field'] = rtrim($D['field'],',');
  66. $D ['val'] = rtrim($D['val'],',');
  67. $ignore = $ignore > 0 ? 'IGNORE' : '';
  68. $sql = "INSERT {$ 무시} INTO {$this->_db['perfix']}{$table}({$D['field']}) VALUES({$D['val']})";
  69. if( $this->exec($sql)){
  70. $insert_id = mysql_insert_id();
  71. return is_numeric($insert_id) ? $insert_id : TRUE;
  72. }else{
  73. FALSE 반환 ;
  74. }
  75. }
  76. 공개 함수 업데이트($table,$field){
  77. $D = Array('where'=>'','str'=>'');
  78. $index = 0;
  79. foreach($field AS $key => $v){
  80. $index == 0 $D['where'] = "{$key} = '{ $this ->escape($v)}'" : $D['str'] .= "{$key} = '{$this->escape($v)}',";
  81. $ 인덱스
  82. }
  83. $D['str'] = rtrim($D['str'],',');
  84. $sql = "UPDATE {$this->_db['perfix '] }{$table} SET {$D['str']} WHERE {$D['where']}";
  85. return $this->exec($sql);
  86. }
  87. 공용 함수 삭제($table,$field){
  88. $str = '';
  89. foreach($field AS $key => $v){
  90. $str = "{$ key} = '{$v}'";
  91. }
  92. $sql = 'DELETE FROM '.$this->_db['perfix'].$table.' WHERE '.$str.' 1' ;
  93. return $this->exec($sql);
  94. }
  95. 공개 함수 sum($table,$condition){
  96. $totle = $this->fetch(' SELECT COUNT (*) AS totle FROM '.$this->_db['perfix'].$table.' WHERE '.$condition);
  97. return $totle[0]['totle'];
  98. }
  99. /**
  100. *기능: 입력 특수문자 필터링
  101. *$v: 감지를 위해 전달할 매개변수
  102. *반환값: 감지된 매개변수
  103. */
  104. 공용 함수 escape($v){
  105. return mysql_real_escape_string($v);
  106. }
  107. /*
  108. *기능: 수행 캐시 판단
  109. */
  110. 공용 함수 캐시($name,$expire=100000000){
  111. $this->_cache['expire'] = $expire;
  112. return $this;
  113. }
  114. 공개 함수 check_expire(){
  115. return (filemtime($this->_cache['path']) $this->_cache['expire']) > ;
  116. }
  117. 공용 함수 쓰기($data){
  118. $f = fopen($this->_cache['path'], 'w');
  119. if ($ f) {
  120. 무리($f, LOCK_EX);
  121. fseek($f, 0);
  122. ftruncate($f, 0);
  123. $tmp = fwrite($f, serialize($ data) );
  124. if (!($tmp === false)) {
  125. $result = true;
  126. }
  127. fclose($f);
  128. }
  129. chmod( $this ->_cache['path'],0777);
  130. }
  131. 공개 함수 get(){
  132. $f = fopen($this->_cache['path'], 'r ') ;
  133. $data = fread($f,filesize($this->_cache['path']));
  134. fclose($f);
  135. return unserialize($data);
  136. }
  137. 공용 함수 delete_dir($dir = ''){
  138. $dir = 비어 있음($dir) ? $this->_cache['dir'] : $dir;
  139. !is_dir( $dir ) && 종료;
  140. $d = opendir($dir);
  141. $i = 0;
  142. while(($file = readdir($d)) !== false){
  143. $path = $dir.'/'.$file;
  144. if($i > 1) is_file($path) ? unlink($path) : $this->delete_dir($path);
  145. $i ;
  146. }
  147. closeir($d);
  148. rmdir($dir);
  149. }
  150. 공개 함수 __destruct(){
  151. isset($this->_connect) && mysql_close ($this->_connect);
  152. }
  153. }
코드 복사


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.