加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php缓存数据性能的mysqli类

发布时间:2023-05-27 13:18:32 所属栏目:PHP教程 来源:
导读:php缓存数据性能的mysqli类:<?php /** * Mysqli类 * * @author 废墟 * @version v1.0 2009-08-18 */ class db_mysqli { protected $mysqli; pro

php缓存数据性能的mysqli类:

<?php    

    /**   

    * Mysqli类   

    *   

    * @author 废墟   

    * @version v1.0 2009-08-18  

    */    

    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));    

            }   //开源代码Cuoxin.com 

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

    ?>

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!