注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
另类:用Ftype巧妙清除病毒
DNS 系统设定例--16.[Fwd] 特殊网
在FreeBSD5.1簡單安裝Postfix+Qp
基于Sendmail和Perl的邮件附件过
用PHP开发qmail邮件服务器管理系
如何利用procmail来对付垃圾邮件
OpenWebMail README中译版
如何在拨号环境下使用postfix
Sybase 11.0.3 for OpenServer 安
ORACLE 7.3.4 for OpenServer 5 
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> PHP >> 文章正文
采用 PEAR 来缓冲 PHP 程序(二)
作者:佚名  来源:不详  点击:  更新:2006-12-19
简介:

最后,我们来定制一个应用,综合的来解释 PEAR 缓冲机制的整体框架。


我们定义一个叫做 MySQL_Query_Cache 的类,缓冲 SELECT 的查询结果。

我们首先定义类的变量:

<?php
require_once ’Cache.php’;

class MySQL_Query_Cache extends Cache {
var $connection = null;
var $expires = 3600;

var $cursor = 0;
var $result = array();

function MySQL_Query_Cache($container = ’file’,
$container_options = array(’cache_dir’=> ’.’,
’filename_prefix’ => ’cache_’), $expires = 3600)
{
$this->Cache($container, $container_options);
$this->expires = $expires;
}

function _MySQL_Query_Cache() {
if (is_resource($this->connection)) {
mysql_close($this->connection);
}

$this->_Cache();
}
}
?>



在正式开始之前,我们需要一些辅助函数。

function connect($hostname, $username, $password, $database) {
$this->connection = mysql_connect($hostname, $username, $password) or trigger_error(’数据库连接失败!’, E_USER_ERROR);

mysql_select_db($database, $this->connection) or trigger_error(’数据库选择失败!’, E_USER_ERROR);
}

function fetch_row() {
if ($this->cursor < sizeof($this->result)) {
return $this->result[$this->cursor++];
} else {
return false;
}
}

function num_rows() {
return sizeof($this->result);
}
?>



下面我们来看怎样缓冲:

<?php
function query($query) {
if (stristr($query, ’SELECT’)) {
// 计算查询的缓冲标记
$cache_id = md5($query);

// 查询缓冲
$this->result = $this->get($cache_id, ’mysql_query_cache’);

if ($this->result == NULL) {
// 缓冲丢失
$this->cursor = 0;
$this->result = array();

if (is_resource($this->connection)) {
// 尽可能采用 mysql_unbuffered_query()

if (function_exists(’mysql_unbuffered_query’)) {$result = mysql_unbuffered_query($query, $this->connection);
} else {$result = mysql_query($query, $this->connection);
}

// 取出所有查询结果
while ($row = mysql_fetch_assoc($result)) {$this->result[] = $row;
}

// 释放 MySQL 结果资源
mysql_free_result($result);
// 把结果缓冲
$this->save($cache_id, $this->result, $this->expires, ’mysql_query_cache’);
}
}
} else {
// 没有查询结果,不需要缓冲
return mysql_query($query, $this->connection);
}
}
?>



例 3: 使用 MySQL 查询缓冲

<?php require_once ’MySQL_Query_Cache.php’;

$cache = new MySQL_Query_Cache();
$cache->connect(’hostname’, ’username’, ’password’, ’database’);
$cache->query(’select * from table’);

while ($row = $cache->fetch_row()) {
echo ’<p>’;
print_r($row);
echo ’</p>’;
}
?>

<全文完>






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务