中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> PHP编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· PHP5.0对象模型探索...
· PHP5.0对象模型探索...
· PHP5的异常处理机制...
· PHP5.0对象模型探索...
· Windows下的PHP5.0安...
· Windows下PHP5和Apa...
· php5手动最简安装方...
· PHP5 OOP编程之代理...
· PHP5this,self, par...
· 数据对象扩展成默认...
PHP5 OOP编程之代理与定制异常(1)
作者:不详  来源:不详  发布时间:2006-8-14 10:19:54  发布人:chinazhan

 减小字体 增大字体

     一、 DBQuery对象
  
    现在,我们的DBQuery对象简单地模仿一个存储过程—一旦被执行,即返回一个必须进行保存的结果资源;并且如果你想使用该结果集上的函数(例如num_rows()或fetch_row())的话,你必须传递MySqlDB对象。那么,如果由DBQuery对象来实现MySqlDB对象(其设计目的是对一个执行查询的结果进行操作)实现的函数,效果如何呢?让我们继续使用上一篇示例中的代码;并且让我们假定,现在由DBQuery对象管理我们的结果资源。DBQuery类的源码如列表1所示。
  
    列表1.使用DBQuery类。
  
  require 'mysql_db.php';
  require_once 'query.php';
  $db = new MySqlDb;
  $db->connect('host', 'username', 'pass');
  $db->query('use content_management_system');
  $query = new DBQuery($db);
  $query->prepare('SELECT fname,sname FROM users WHERE username=:1S AND pword=:2S AND expire_time<:3I');
  try {
   if($query->execute("visualad", "apron", time()))->num_rows() == 1) {
    echo('Correct Credentials');
   } else {
    echo('Incorrect Credentials / Session Expired');
   }
  } catch (QueryException $e) {
   echo('Error executing query: ' . $e);
  }
  
    上面修改后的代码中我们最感兴趣的是,catch语句和execute语句。
  
    · execute语句不再返回一个结果资源,现在它返回DBQuery对象本身。
  
    · DBQuery对象现在实现num_rows()函数—我们从DB接口中已经熟悉。
  
    · 如果查询执行失败,它抛出一个QueryException类型的异常。当被转换成一个字符串时,它将返回发生的错误的细节信息。
  
    为此,你需要使用代理。事实上,你在我们的DBQuery对象中已经使用代理了,但是现在将更为深入地使用它来把它与MySqlDB对象紧密绑定。该DBQuery对象已经被使用一个实现DB接口的对象初始化,并且它已经包含一个成员函数execute—由它调用DB对象的query()方法来执行该查询。这个DBQuery对象本身并不实际地查询数据库,它把这项任务交由DB对象来完成。这就是代理,其实是一个进程—借助于这个进程,通过把消息发送给另一个实现相同的或类似行为的对象,一个对象可以实现一个特别的行为。
  
    为此,你需要修改DBQuery对象以便包括所有的函数—它们操作一个来自DB对象的结果资源。当执行查询以调用DB对象的相应函数并且返回它的结果时,你需要使用存储的结果。下列函数将被添加:
  
    列表2:使用代理扩展DBQuery类。
  
  class DBQuery
  {
   .....
  
   public function fetch_array()
   {
    if (! is_resource($this->result)) {
     throw new Exception('Query not executed.');
    }
    return $this->db->fetch_array($this->result);
   }
  
   public function fetch_row()
   {
    if (! is_resource($this->result)) {
     throw new Exception('Query not executed.');
    }
    return $this->db->fetch_row($this->result);
   }
  
   public function fetch_assoc()
   {
    if (! is_resource($this->result)) {
     throw new Exception('Query not executed.');
    }
    return $this->db->fetch_assoc($this->result);
   }
  
   public function fetch_object()
   {
    if (! is_resource($this->result)) {
     throw new Exception('Query not executed.');
    }
    return $this->db->fetch_object($this->result);
   }
  
   public function num_rows()
   {
    if (! is_resource($this->result)) {
     throw new Exception('Query not executed.');
    }
    return $this->db->num_rows($this->result);
   }
  }
  
    每个函数的实现相当简单。它首先进行检查,以确保已经执行查询,然后把任务代理到DB对象,返回它的结果就好象它是查询对象本身(称作是基本数据库函数)一样。
  
  
  
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .