• 技术文章 >后端开发 >php教程

    一个简单的数据库连接和文本缓存综合类

    2016-07-25 08:49:36原创420
    没什么特色,就是把数据库连接和文本缓存封装在一个类里面了
    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. *作用:获取表中数据,并将所查询到的数据格式化返回,返回格式是数组形式!
    15. *$sql:传入的待执行的SQL语句,必须而且只能是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'].'//m.sbmmt.com/m/'.$dir;
    24. !is_dir($dir) && mkdir($dir,0777);
    25. !is_dir($dir) && mkdir($dir,0777);
    26. $this->_cache['path'] = $dir.'//m.sbmmt.com/m/'.$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. *作用:执行所有的SQL语句,但不包括SELECT!
    43. *$sql:传入的待执行的SQL语句,不能为SELECT
    44. *返回值: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:传入的待执行的条件,是数组格式table代表待执行插入的表,row是字段,value是待插入的值
    57. *返回值: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. *作用:对输入特殊字符进行过滤
    101. *$v:待传入检测的参数
    102. *返回值:检测完的参数
    103. */
    104. public function escape($v){
    105. return mysql_real_escape_string($v);
    106. }
    107. /*
    108. *作用:进行缓存判断
    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.'//m.sbmmt.com/m/'.$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. }
    复制代码


    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:一个简单的数据库连接和文本缓存综合类
    上一篇:从请求的页面提取关键词 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP网站常见一些安全漏洞及防御方法• 实战PHP5+Apache2.2+MySQL5.1配置经历_PHP教程• PHP5.0对象模型探索之抽象方法和抽象类_php基础• php多文件上传实现代码_PHP• 无需重新编译php加入ftp扩展的解决方法_PHP
    1/1

    PHP中文网