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 相关文章推荐
配置支持SSI
Nov 25 PHP
发布一个用PHP fsockopen写的HTTP下载的类
Feb 22 PHP
抓取YAHOO股票报价的类
May 15 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
php四种基础算法代码实例
Oct 29 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 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
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP输出日历表代码实例
2015/03/27 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
mailto的使用技巧分享
2012/12/21 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
Python使用matplotlib绘制动画的方法
2015/05/20 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python 解析简单的XML数据
2020/07/24 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
电气工程师岗位职责
2014/01/01 职场文书
公司活动方案范文
2014/03/06 职场文书
设计顾问服务计划书
2014/05/04 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
化工厂员工工作总结
2015/10/15 职场文书
早安问候语大全
2015/11/10 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
2022年显卡天梯图(6月更新)
2022/06/17 数码科技