ZendFramework框架实现连接两个或多个数据库的方法


Posted in PHP onDecember 08, 2016

本文实例讲述了ZendFramework框架实现连接两个或多个数据库的方法。分享给大家供大家参考,具体如下:

配置文件:

<db>
    <adapter>PDO_MSSQL</adapter>
  <config>
      <host>localhost</host>
      <port>1433</port>
      <username>sa</username>
      <password>123456</password>
      <dbname>edudb</dbname>
      <pdoType>sqlsrv</pdoType>
    </config>
  </db>
  <!-- 测试多数据库 -->
  <db2>
    <adapter>PDO_MSSQL</adapter>
      <config>
      <host>localhost</host>
      <port>1433</port>
      <username>sa</username>
      <password>123456</password>
      <dbname>test</dbname>
      <pdoType>sqlsrv</pdoType>
    </config>
  </db2>

入口文件

//配置数据库连接
$db_config = $web_config->db->config->toArray(); 
//var_dump($db_config);
$db = Zend_Db::factory($web_config->db->adapter, $db_config); 
//var_dump($db);
//exit;
//$db->query('set NAMES utf8');
//$db->getProfiler()->setEnabled(false); 
Zend_Db_Table::setDefaultAdapter($db);

这里是默认的数据库

dao.php调用默认数据库

$db = &$this->getAdapter();

dao2.php连接其他数据库

function init() {
    $web_config = $this->getCfg();
    $this->db2_config = $web_config->db2->config->toArray(); 
    //var_dump($this->db_config);
    $this->db = Zend_Db::factory($web_config->db2->adapter, $this->db2_config); 
    Zend_Db_Table::setDefaultAdapter($this->db); 
}
public function returnDb(){
    return $this->db;
}

调用

$db = &$this->getAdapter();

还是会连接默认数据库。

直接使用

$this->db

就可以了

来看一下完整的dao2.php

<?php
class dao_dao2 extends Zend_Db_Table {
  protected $cfg_; 
  function init() {
    $web_config = $this->getCfg();
    $this->db2_config = $web_config->db2->config->toArray(); 
    //var_dump($this->db_config);
    $this->db = Zend_Db::factory($web_config->db2->adapter, $this->db2_config); 
    Zend_Db_Table::setDefaultAdapter($this->db); 
  }
  public function returnDb(){
    return $this->db;
  }
  public function getData($table,$where = false, $order = 'id ASC', $pagesize = false, $offset = false, $count = false, $from = false, $join = false, $group = false) {
    //$this->db = &$this->getAdapter();
    $select = $this->db->select();
    if ($where && is_array($where)) {
      foreach ($where as $key => $val) {
        //print_r($where);
        if($val['type']==1){
          $select->where($key, $this->convert2gbk($val['val']));
        }else{
          $select->orwhere($key, $this->convert2gbk($val['val']));
        }
      } 
    }
    if (!$from)
      $from = '*';
    //echo $select."<br/>";
    if ($pagesize) {
      $select->limit($pagesize, $offset);
    }
    //echo $select."<br/>";
    if (is_array($order)) {
      foreach ($order as $value) {
        $select->order($value);
      }
    } else {
      $select->order($order);
    }
    //echo $select."<br/>";
    $select->from($table, $count ? "COUNT(".$table.".id)" : $from);
    if (is_array($group)) {
      foreach ($group as $key => $val) {
        $select->group($val);
      }
      if ($count) {
        $result = $this->db->fetchAll($select);
        //echo $select."<br/>";
        return $result;
      }
    } else {
      if ($count) {
        $result = $this->db->fetchOne($select);
        //echo $select."<br/>";
        return $result;
      }
    }
    if (is_array($join)) {
      foreach ($join as $key => $val) {
        //$select->join($key, $val[0], $val[1]);
        $select->joinleft($key, $val[0], $val[1]);
      }
    }
    //echo $select."<br/>";
    //echo $select;exit;
    $result = $this->db->fetchAll($select);
    foreach ($result as $key => $value) {
      foreach ($value as $key2 => $value2) {
        $result[$key][$key2] = $this->convert2utf8($value2);
      }
    }
    return $result;
  }
  /**
   * 向表中插入数据
   * array $adata 数据
   * string $table 表名
   * int $insterid 是否需要返回插入ID
   * @return true or false or int
   */
   // @bianding 2013.11.04 更改了pdo中mssql.php的lastInsertId()函数
   // @bianding 2013.11.04 经测试 mssql.php中的lastInsertId()函数中的SELECT两种方式都行
  function SaveData($adata, $table, $insterid = 0, $aLog = false) {
    //$this->db = &$this->getAdapter();
    foreach ($adata as $key => $value) {
      $adata[$key] = $this->convert2gbk($value);
    }
    if ($this->db->insert($table, $adata)) {
      //var_dump($this->db->getProfiler());
      $insertedID = $this->db->lastInsertId();      
      if ($insterid) {
        return $insertedID;
      } else {
        return TRUE;
      }
    } else {
      return false;
    }
  }
  /**
   * 删除表中数据
   * 
   * @param string $table 表名
   * @param string $where 'id ='.$id 条件
   * @return true or false
   */
  function DelData($table, $where, $aLog = false) {
    //$this->db = & $this->getAdapter();
    if ($this->db->delete($table, $where)) {
      return TRUE;
    } else {
      return FALSE;
    }
  }
  /**
   * 更新表中数据
   *
   * @param string $table
   * @param array $adata
   * @param string $where 'id ='.$id
   * @return true or false
   */
  function UpdateData($table, $adata, $cond, $aLog = false) {
    //$this->db = & $this->getAdapter();
    foreach ($adata as $key => $value) {
      $adata[$key] = $this->convert2gbk($value);
    }
    if ($this->db->update($table, $adata, $cond)) {
      return TRUE;
    } else {
      return false;
    }
  }
  public function clearTable($table) {
    //$this->db = &$this->getAdapter();
    $result = $this->db->query('TRUNCATE TABLE ' . $table);
  }
  public function executeSql($strSql) {
    //$this->db = &$this->getAdapter();
    $result = $this->db->query($strSql);
  }
  function convert2utf8($string)
  {
    $config = $this->getCfg();
    $pdoType = $config->db->config->pdoType;
    if($pdoType == 'dblib'){
      return iconv("gbk","utf-8",$string);
    }elseif($pdoType == 'sqlsrv'){
      //$encode = mb_detect_encoding($string, array('UTF-8',"GB2312",'GBK','BIG5')); 
      //echo $encode;
      return mb_convert_encoding($string,"UTF-8","UTF-8");
      //return $string;
    }
  }
  function convert2gbk($string)
  {
    $config = $this->getCfg();
    $pdoType = $config->db->config->pdoType;
    if($pdoType == 'dblib'){
      return iconv("utf-8","gbk",$string);
    }elseif($pdoType == 'sqlsrv'){
      //$encode = mb_detect_encoding($string, array('UTF-8',"GB2312",'GBK','BIG5')); 
      //echo $encode; 
      return mb_convert_encoding($string,"UTF-8","UTF-8");
      //return $string;
    }
  }
  protected function &getCfg() {
    if ($this->cfg_ === null) {
      $registry = Zend_Registry::getInstance();
      $this->cfg_ = $registry->get('web_config');
    }
    return $this->cfg_;
  } 
}

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中调用JAVA
Oct 09 PHP
PHP面向对象编程快速入门
Oct 09 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
PHP读取Excel类文件
May 15 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 PHP
thinkPHP模板引擎用法示例
Dec 08 #PHP
thinkPHP中session()方法用法详解
Dec 08 #PHP
thinkPHP引入类的方法详解
Dec 08 #PHP
PHP对象、模式与实践之高级特性分析
Dec 08 #PHP
php中__toString()方法用法示例
Dec 07 #PHP
php中this关键字用法分析
Dec 07 #PHP
php中final关键字用法分析
Dec 07 #PHP
You might like
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
PHP重定向的3种方式
2013/03/07 PHP
php开发工具有哪五款
2015/11/09 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
python读写ini文件示例(python读写文件)
2014/03/25 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
python函数不定长参数使用方法解析
2019/12/14 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
贷款委托书范本
2014/04/08 职场文书
记账会计岗位职责
2014/06/16 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
2015元旦节寄语
2014/12/08 职场文书
党员争先创优承诺书
2015/01/20 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
正则表达式基础与常用验证表达式
2022/06/16 Javascript