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注入实例
Oct 09 PHP
PHP 中dirname(_file_)讲解
Mar 18 PHP
PHP JSON 数据解析代码
May 26 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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 UTF8编码内的繁简转换类
2009/07/20 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
php实现json编码的方法
2015/07/30 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
js下写一个事件队列操作函数
2010/07/19 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
python能自学吗
2020/06/18 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
Python爬虫教程知识点总结
2020/10/19 Python
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
毕业生个人求职信范例分享
2013/12/17 职场文书
公开服务承诺制度
2014/03/26 职场文书
教师节联欢会主持词
2015/07/04 职场文书
详解Redis瘦身指南
2021/05/26 Redis
nginx日志格式分析和修改
2022/04/28 Servers