php写的带缓存数据功能的mysqli类


Posted in PHP onSeptember 06, 2012
<?php 
/** 
* Mysqli类 
*/ 
class db_mysqli { 
protected $mysqli; 
protected $sql; 
protected $rs; 
protected $query_num = 0; 
protected $fetch_mode = MYSQLI_ASSOC; 
protected $cache_dir = './cache/'; 
protected $cache_time = 1800; 
public function __construct($dbhost, $dbuser, $dbpass, $dbname) { 
$this->mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
if(mysqli_connect_errno()) { 
$this->mysqli = false; 
echo '<h2>'.mysqli_connect_error().'</h2>'; 
die(); 
} else { 
$this->mysqli->set_charset("utf8"); 
} 
} 
public function __destruct() { 
$this->free(); 
$this->close(); 
} 
protected function free() { 
@$this->rs->free(); 
} 
protected function close() { 
$this->mysqli->close(); 
} 
protected function fetch() { 
return $this->rs->fetch_array($this->fetch_mode); 
} 
protected function getQuerySql($sql, $limit = null) { 
if (@preg_match("/[0-9]+(,[ ]?[0-9]+)?/is", $limit) && !preg_match("/ LIMIT [0-9]+(,[ ]?[0-9]+)?$/is", $sql)) { 
$sql .= " LIMIT " . $limit; 
} 
return $sql; 
} 
protected function get_cache($sql,$method) { 
include_once './cache.php';//若框架中使用__autoload(),这里可以不用加载文件 
$cache = new cache($this->cache_dir,$this->cache_time); 
$cache_file = md5($sql.$method); 
$res = $cache->get_cache($cache_file); 
if(!$res) { 
$res = $this->$method($sql); 
$cache->set_cache($cache_file, $res); 
} 
return $res; 
} 
public function query_num() { 
return $this->query_num; 
} 
public function set_cache_dir($cache_dir) { 
$this->cache_dir = $cache_dir; 
} 
public function set_cache_time($cache_time) { 
$this->cache_time = $cache_time; 
} 
public function query($sql, $limit = null) { 
$sql = $this->getQuerySql($sql, $limit); 
$this->sql = $sql; 
$this->rs = $this->mysqli->query($sql); 
if (!$this->rs) { 
echo "<h2>".$this->mysqli->error."</h2>"; 
die(); 
} else { 
$this->query_num++; 
return $this->rs; 
} 
} 
public function getOne($sql) { 
$this->query($sql, 1); 
$this->fetch_mode = MYSQLI_NUM; 
$row = $this->fetch(); 
$this->free(); 
return $row[0]; 
} 
public function get_one($sql) { 
return $this->getOne($sql); 
} 
public function cache_one($sql) { 
$sql = $this->getQuerySql($sql, 1); 
return $this->get_cache($sql, 'getOne'); 
} 
public function getRow($sql, $fetch_mode = MYSQLI_ASSOC) { 
$this->query($sql, 1); 
$this->fetch_mode = $fetch_mode; 
$row = $this->fetch(); 
$this->free(); 
return $row; 
} 
public function get_row($sql, $fetch_mode = MYSQLI_ASSOC) { 
return $this->getRow($sql); 
} 
public function cache_row($sql) { 
$sql = $this->getQuerySql($sql, 1); 
return $this->get_cache($sql, 'getRow'); 
} 
public function getAll($sql, $limit = null, $fetch_mode = MYSQLI_ASSOC) { 
$this->query($sql, $limit); 
$all_rows = array(); 
$this->fetch_mode = $fetch_mode; 
while($rows = $this->fetch()) { 
$all_rows[] = $rows; 
} 
$this->free(); 
return $all_rows; 
} 
public function get_all($sql, $limit = null, $fetch_mode = MYSQLI_ASSOC) { 
return $this->getAll($sql); 
} 
public function cache_all($sql, $limit = null) { 
$sql = $this->getQuerySql($sql, $limit); 
return $this->get_cache($sql, 'getAll'); 
} 
public function insert_id() { 
return $this->mysqli->insert_id(); 
} 
public function escape($str) { 
if(is_array($str)) { 
foreach($str as $key=>$val) { 
$str[$key] = $this->escape($val); 
} 
} else { 
$str = addslashes(trim($str)); 
} 
return $str; 
} 
} 
//用法 
$db = new db_mysqli('localhost', 'root', 111222, 'dict'); 
$db->set_cache_time(10); 
$db->set_cache_dir('./cache/sql/'); 
$sql = "select * from words order by word_id limit 10,10"; 
$res1 = $db->get_all($sql); 
$res2 = $db->cache_all($sql); 
echo $db->query_num(),'<br>'; 
?>
PHP 相关文章推荐
PHP无敌近乎加密方式!
Jul 17 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
一个PHP并发访问实例代码
Sep 06 #PHP
PHP连接MongoDB示例代码
Sep 06 #PHP
谨慎使用PHP的引用原因分析
Sep 06 #PHP
很让人受教的 提高php代码质量36计
Sep 05 #PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 #PHP
三个类概括PHP的五种设计模式
Sep 05 #PHP
用来解析.htpasswd文件的PHP类
Sep 05 #PHP
You might like
基于mysql的bbs设计(三)
2006/10/09 PHP
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
php导入模块文件分享
2015/03/17 PHP
ThinkPHP模型详解
2015/07/27 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python字符串格式化
2015/06/15 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
行政助理求职自荐信
2013/10/26 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
转预备党员政审材料
2014/02/06 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
休假证明书
2015/06/24 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
idea下配置tomcat避坑详解
2022/04/12 Servers