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 )); } //开源代码phpfensi测试数据 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缓存数据功能的mysqli类 - php类库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29509