Home  >  Article  >  Backend Development  >  A simple PHP database connection and text cache comprehensive class

A simple PHP database connection and text cache comprehensive class

WBOY
WBOYOriginal
2016-07-23 08:54:56852browse
[PHP]代码
  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)){} //去除索引
  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); //进行数据链接
  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: 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: Parameters after detection
  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
Comprehensive category, php


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