Chinaunix首页 | 论坛 | 博客
  • 博客访问: 674982
  • 博文数量: 102
  • 博客积分: 2585
  • 博客等级: 少校
  • 技术积分: 1115
  • 用 户 组: 普通用户
  • 注册时间: 2005-01-17 02:26
个人简介

IT屌丝一枚

文章分类

全部博文(102)

文章存档

2017年(1)

2016年(1)

2014年(6)

2013年(2)

2012年(1)

2011年(2)

2010年(3)

2009年(3)

2008年(4)

2007年(5)

2006年(40)

2005年(34)

分类:

2006-07-13 16:46:06

原著:Fragmaster B
翻译:Sail Lee
 
原文见:
 
译者按:本文给出了一个在应用中以模块方式调用Adodb数据库抽象类的实例,在PRADO的开发版本(Lastest版本可从官方Subversion源码库下载)中,已经加入了一现成的TAdodb模块,可提供相同的作用,用户可以直接使用TAdodb达到相同的目的。因此,本文仅对下载官方发布的3.0.2或以下3.0版本的用户有参考作用。特此说明。
 
这是一个在PRADO 3里面使Adodb可用(以模块方式)的方法。事实上它的用法始终与Prado 2版本很相似。
 
在页面中的使用:
class home extends TPage{
 public function onLoad($param){
  $db = $this->Application->getModule('adodb');
  $sql = 'SELECT email FROM user WHERE user_id=1';
  echo $db->GetOne($sql);
 }
}
?>

1) 拷贝粘贴下列代码到一个叫adbdb.php的新文件中去并把所说的这个文件放到“protected\modules\Copy”目录中去。你可能必须重定向两个“require_once”路径,以便它们正确指出你的adodb文件夹。

adodb.php

define('ADODB_ASSOC_CASE', 0); //为了方便,指示ADOdb总是返回小写的字段名。

require_once('../../../adodb/adodb-exceptions.inc.php');
require_once('../../../adodb/adodb.inc.php');

/*
|-------------------------------------------------------------------------------------------------------------
| CLASS: adodb
|-------------------------------------------------------------------------------------------------------------
| 说明: 使adodb库能作为Prado的一个模块
|-------------------------------------------------------------------------------------------------------------
| 属性      类型
|-------------------------------------------------------------------------------------------------------------
| -$db         Obj. 一个adodb对象的实例(NewADOConnection)。
| -$_Driver        String. 连接类型。例如:mysql、mssql、oci8、odbc。
|          
| -$_Host        String. 主机/服务器名称/IP等等。
| -$_Username       String. 认证用的数据库用户名。
| -$_Password       String. 认证用的数据库密码。
| -$_Database       String. 要连接的数据库名称。
| -$_Persistent = false     Boolean. 是否是持久连接?
|-------------------------------------------------------------------------------------------------------------
| 方法        DESCR/返回
|-------------------------------------------------------------------------------------------------------------
| +init($config)      Prado method. 从application.xml中以的值设定。
| +__call($method, $params)    PHP的魔术方法。传递产生到this对象的调用到$db。
| +getDatabaseConnection()    实例化一DB链接或返回已打开的DB链接。
| +getDriver()       返回$_Driver.
| +setDriver($value)     设定$_Driver.
| +getHost()       返回$_Host.
| +setHost($value)      设定$_Host.
| +getUsername()      返回$_Username.
| +setUsername($value)     设定$_Username.
| +getPassword()      返回$_Password.
| +setPassword($value)     设定$_Password.
| +getDatabase()      返回$_Database.
| +setDatabase($value)     设定$_Database.
| +getPersistent()      返回$_Persistent.
| +setPersistent($value)    设定$_Persistent.
|-------------------------------------------------------------------------------------------------------------
*/
class adodb extends TModule{
 private $db;
 private $_Driver;
 private $_Host;
 private $_Username;
 private $_Password;
 private $_Database;
 private $_Persistent = false;
 
  
 public function init($config){
  if (!$this->Driver){
   throw new TConfigurationException('Missing param: Driver');
  }
  if (!$this->Host){
   throw new TConfigurationException('Missing param: Host');
  }
  if (!$this->Username){
   throw new TConfigurationException('Missing param: Username');
  }
  if (!$this->Password){
   throw new TConfigurationException('Missing param: Password');       
  }
  if (!$this->Database){
   throw new TConfigurationException('Missing param: Database');       
  }
  parent::init($config);
 }
  
 //PHP的魔术函数。
 //这个方法将传递所有的方法调用给ADODB类/库。
 public function __call($method, $params){
  $conn = $this->getDatabaseConnection();
  return call_user_func_array(array($conn, $method), $params);
 }
 
 private function getDatabaseConnection(){
  if (!isset($this->db)){  
   $this->db = NewADOConnection($this->Driver);
   $this->db->SetFetchMode(ADODB_FETCH_ASSOC);
   if ($this->Persistent){
    //详见:
    $this->db->PConnect($this->Host, $this->Username, $this->Password, $this->Database);
   }
   else{
    //详见:
    $this->db->Connect($this->Host, $this->Username, $this->Password, $this->Database);
   }
  }
  return $this->db;
 }
 
 //参数的获取和设定方法
 public function getDriver(){
  return $this->_Driver;
 }
 public function setDriver($value){
  $this->_Driver = TPropertyValue::ensureString($value);
 }
 public function getHost(){
  return $this->_Host;
 }
 public function setHost($value){
  $this->_Host = TPropertyValue::ensureString($value);
 }
 public function getUsername(){
  return $this->_Username;
 }
 public function setUsername($value){
  $this->_Username = TPropertyValue::ensureString($value);
 }
 public function getPassword(){
  return $this->_Password;
 }
 public function setPassword($value){
  $this->_Password = TPropertyValue::ensureString($value);
 }
 public function getDatabase(){
  return $this->_Database;
 }
 public function setDatabase($value){
  $this->_Database = TPropertyValue::ensureString($value);
 }
 public function getPersistent(){
  return $this->_Persistent;
 }
 public function setPersistent($value){
  $this->_Persistent = TPropertyValue::ensureBoolean($value);
 }
}
?>

2) 现在要在我们需要的地方拥有该模块,请在application.xml中使它的命名空间可用并使当前模块可用(带链接参数)。



 
  
  ...
 

 
 
     Driver="mysql" Host="localhost" Username="usernamehere" Password="passwordhere" Database="databasenamehere" />
 

        ...

阅读(1911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~