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

代码如下:

<?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>';
?>

(0)

相关推荐

  • php开启mysqli扩展之后如何连接数据库

    Mysqli是php5之后才有的功能,没有开启扩展的朋友可以打开您的php.ini的配置文件. 查找下面的语句:;extension=php_mysqli.dll将其修改为:extension=php_mysqli.dll即可. 相对于mysql有很多新的特性和优势 (1)支持本地绑定.准备(prepare)等语法 (2)执行sql语句的错误代码 (3)同时执行多个sql (4)另外提供了面向对象的调用接口的方法. 下面一一用php实例进行mysqli数据库连接! 使用方法一:使用传统的面向过程

  • PHP实现基于面向对象的mysqli扩展库增删改查操作工具类

    本文实例讲述了PHP实现基于面向对象的mysqli扩展库增删改查操作工具类.分享给大家供大家参考,具体如下: mysqli扩展库是MySQL扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和mysql扩展库大体一致,这次还是先抽取出来一个操作mysql的工具类,和调用的类. 1. mysqli扩展库操作数据库工具类 <?php //数据库操作类 class DBUtil{ pr

  • PHP使用Mysqli类库实现完美分页效果的方法

    本文实例讲述了PHP使用Mysqli类库实现完美分页效果的方法.分享给大家供大家参考,具体如下: 本篇文章是基于的是我的上篇文章<PHP数据库操作之基于Mysqli的数据库操作类库>而量身打造,怎么使用 M 类库中的 FetchAll 方法做出完美分页. 分页在我们每个项目中都是必不可少的,而且出现的频率非常之多.这样就要求我们程序员在项目中怎样去以最快的速度.最简洁的代码去实现分页方案. 分页的实现大部分是依据 URL 传入的参数(一般是page)来实现,比如:http://localhos

  • PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)

    本文实例讲述了PHP入门教程之使用Mysqli操作数据库的方法.分享给大家供大家参考,具体如下: Demo1.php <?php //使用 mysqli 对象操作数据库 //创建 mysqli 对象(资源句柄) $_mysqli = new mysqli(); //连接数据库 1.主机名(ip) 2.账户 3.密码 4.数据库 //mysqli_connect 函数 == $_mysqli -> connect(); $_mysqli -> connect('localhost','ro

  • PHP数据库操作之基于Mysqli的数据库操作类库

    此类库简单.易用,便于你自己修改和对功能的改善,能解决大部分 PHP 项目中执行的 SQL 操作. 初步工作 首先,请大家下载这个类库 M.class.php 再下载一个 Mysqli 连接数据库的类库 MysqliDb.class.php(打包下载地址)  新建一个 includes 的文件夹,将下载下来的两个 class 文件,放进去. 然后,请你在项目下创建一个 test.php 文件.注:UTF-8 文件格式 请先根据你机器的情况,填充以下代码,用于连接数据库: 复制代码 代码如下: h

  • PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】

    本文实例讲述了PHP基于MySQLI函数封装的数据库连接工具类.分享给大家供大家参考,具体如下: mysql.class.php: <?php class mysql { private $mysqli; private $result; /** * 数据库连接 * @param $config 配置数组 */ public function connect($config) { $host = $config['host']; //主机地址 $username = $config['usern

  • PHP中用mysqli面向对象打开连接关闭mysql数据库的方法

    如下所示: 代码如下: <meta http-equiv="content-type" content="text/html" charset="utf-8"/> <h1>用mysqli面向对象方法连接数据库!-姚远的博客</h1> <form method="POST" action="<?php echo htmlspecialchars($_SERVER['PHP

  • PHP以mysqli方式连接类完整代码实例

    本文所述的是一个在PHP中以mysqli方式连接数据库的一个数据库类实例,该数据库类是从一个PHP的CMS中整理出来的,可实现PHP连接数据库类,MySQLi版,兼容PHP4,对于有针对性需要的朋友可根据此代码进行优化和修改. <?php #================================================================================================== # Filename: /db/db_mysqli.php

  • php封装的mysqli类完整实例

    本文实例讲述了php封装的mysqli类.分享给大家供大家参考,具体如下: 类: <?php header('content-type:text/html;charset=utf-8'); /* 掌握满足单例模式的必要条件 (1)私有的构造方法-为了防止在类外使用new关键字实例化对象 (2)私有的成员属性-为了防止在类外引入这个存放对象的属性 (3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作 */ class Connect

  • PHP实现基于mysqli的Model基类完整实例

    本文实例讲述了PHP实现基于mysqli的Model基类.分享给大家供大家参考,具体如下: DB.class.php <?php //数据库连接类 class DB { //获取对象句柄 static public function getDB() { $_mysqli = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME); if (mysqli_connect_errno()) { echo '数据库连接错误!错误代码:'.mysqli_connect_e

  • PHP使用mysqli扩展连接MySQL数据库

    1.面向对象的使用方式 $db = new mysqli('localhost', 'root', '123456', 'dbname'); 如果建立连接时未指定数据库则选择使用的数据库,切换使用的数据库 $db->select_db('dbname'); $query = "SELECT * FROM user WHERE uid=4"; $result = $db->query($query); $result_num = $result->num_rows; $

  • php中数据库连接方式pdo和mysqli对比分析

    1)总的比较   PDO MySQLi 数据库支持 12种不同的数据库支持 支持MySQL API OOP OOP + 过程 Connection Easy Easy 命名参数 支持 不支持 对象映射支持 支持 支持 预处理语句  (客户端) 支持 不支持 性能 快 快 支持存储过程 支持 支持 2 连接方式 先来看下两者连接数据库的方式: 复制代码 代码如下: // PDO $pdo = new PDO("mysql:host=localhost;dbname=database",

随机推荐