Home  >  Article  >  Backend Development  >  A simple comprehensive class for database connection and text caching

A simple comprehensive class for database connection and text caching

WBOY
WBOYOriginal
2016-07-25 08:49:36871browse
Nothing special, just encapsulate the database connection and text cache in a class
  1. class Db{
  2. protected $_connect;
  3. protected $_db = Array();
  4. protected $_cache = Array();
  5. public function __construct($args){
  6. list($this->_db, $this->_cache) = $args;
  7. }
  8. protected function 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. *Function: Get the data in the table and format and return the queried data. The return format is in array form!
  15. *$sql: The incoming SQL statement to be executed must and can only be SELECT
  16. *
  17. */
  18. public function 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)){} //Remove index
  35. mysql_free_result($data );
  36. array_pop($result);
  37. isset($this->_cache['expire']) && $this->write($result);
  38. }
  39. return $result;
  40. }
  41. /**
  42. *Function: Execute all SQL statements, but not including SELECT!
  43. *$sql: The incoming SQL statement to be executed cannot be SELECT
  44. *Return value: TRUE OR FALSE
  45. */
  46. public function exec($sql){
  47. if($this->_connect === null) $this->connect($this->_db); //Perform data link
  48. if( $result = mysql_query($sql, $this->_connect) ){
  49. return $result;
  50. }else{
  51. die("{$sql}
    Execution error: " . mysql_error());
  52. }
  53. }
  54. /**
  55. *Function: Execute database insertion statement, which can only be INSERT statement!
  56. *$v: The passed-in conditions to be executed are in array format, table represents the table to be inserted, row is the field, and value is the value to be inserted
  57. *Return value: mysql_insert_id() OR FALSE
  58. */
  59. public function 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 {$ignore} 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. return FALSE;
  74. }
  75. }
  76. public function update($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. $index++;
  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. public function delete($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.' LIMIT 1';
  93. return $this->exec($sql);
  94. }
  95. public function 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. *Function: Filter the input special characters
  101. *$v: Parameters to be passed in for detection
  102. *Return value: Detected parameters
  103. */
  104. public function escape($v){
  105. return mysql_real_escape_string($v);
  106. }
  107. /*
  108. *Function: perform cache judgment
  109. */
  110. public function cache($name,$expire=100000000){
  111. $this->_cache['expire'] = $expire;
  112. return $this;
  113. }
  114. public function check_expire(){
  115. return ( filemtime($this->_cache['path']) + $this->_cache['expire']) > strtotime("now");
  116. }
  117. public function write($data){
  118. $ f = fopen($this->_cache['path'], 'w');
  119. if ($f) {
  120. flock($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. public function 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. public function delete_dir($ dir = ''){
  138. $dir = empty($dir) ? $this->_cache['dir'] : $dir;
  139. !is_dir($dir) && exit;
  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. closedir($d);
  148. rmdir($dir);
  149. }
  150. public function __destruct() {
  151. isset($this->_connect) && mysql_close($this->_connect);
  152. }
  153. }
Copy code


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn