配置文件

 <db>
<adapter>PDO_MSSQL</adapter>
<config>
<host>localhost</host>
<port></port>
<username>sa</username>
<password></password>
<dbname>edudb</dbname>
<pdoType>sqlsrv</pdoType>
</config>
</db> <!-- 测试多数据库 -->
<db2>
<adapter>PDO_MSSQL</adapter>
<config>
<host>localhost</host>
<port></port>
<username>sa</username>
<password></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']==){
$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[], $val[]);
}
} //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 = , $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_;
} }
												

Zendframework连接两个或多个数据库的实现的更多相关文章

  1. Thinkphp框架下连接两个及以上的数据库方法

    在我们的实际开发者,我们经常需要链接两个以上的数据库,方法跟简单 Thinkphp文档中也有介绍:点击查看 方法如下: 第一步:配置文件config.php <?php //默认数据库1 ret ...

  2. Linq to Entity中连接两个数据库时要注意的问题

    Linq to Entity中连接两个数据库时要注意的问题 今天大学同学问了我一个问题,Linq to Entity中连接两个数据库时,报错“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用 ...

  3. Android 通过外键连接两个数据库

    Learn: 1.Android数据库的语法. 2.通过外键连接两个数据库. 3.加强了对数据库的熟悉度. 4.对文本框的visiblity属性的了解. Demo:http://pan.baidu.c ...

  4. Springboot配置连接两个数据库

    背景: 项目中需要从两个不同的数据库查询数据,之前实现方法是:springboot配置连接一个数据源,另一个使用jdbc代码连接. 为了改进,现在使用SpringBoot配置连接两个数据源 实现效果: ...

  5. [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库

    时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...

  6. sqlserver2014两台不同服务器上数据库同步

    sqlserver2014两台不同服务器上数据库同步   同步了快一个月了,哈哈,因为途中比较麻烦,第一次,遇到烦的地方就停下了,今天终于同步成功了,哈哈,下面我就来介绍一下我实现两台数据库同步的过程 ...

  7. [转]sqlserver2014两台不同服务器上数据库同步

    https://www.cnblogs.com/peng0731/p/7359465.html 同步了快一个月了,因为途中比较麻烦,第一次,遇到烦的地方就停下了,今天终于同步成功了,哈哈,下面我就来介 ...

  8. windows下通过navicat for mysql连接centos6.3-64bit下的MySQL数据库

    一.centos下MySQL安装 按照命令依次安装以下文件: mysql-devel 开发用到的库以及包含文件 mysql mysql 客户端 mysql-server 数据库服务器 yum inst ...

  9. JavaScript concat() 方法-连接两个或多个数组

    一,定义和用法 concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 语法 arrayObject.concat(arrayX,arrayX,. ...

随机推荐

  1. boost库使用:仿SGI-STL实现的一个树节点allocator

    ////////////////////////////////////////////////////////////////////////// //code by hzs //email: hu ...

  2. Winform不用窗体之间传值

    1 先构建一个类,内容如下: namespace TravelForm { public sealed class Setting { private static volatile Setting ...

  3. 深入浅出Node.js (4) - 异步编程

    4.1 函数式编程 4.1.1 高阶函数 4.1.2 偏函数用法 4.2 异步编程的优势与难点 4.2.1 优势 4.2.2 难点 4.3 异步编程解决方案 4.3.1 事件发布/订阅模式 4.3.2 ...

  4. 4Sum 解答

    Question Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c  ...

  5. SQL server 中 COUNT DISTINCT 函数

    目的:统计去重后表中所有项总和. 直观想法: SELECT COUNT(DISTINCT *) FROM [tablename] 结果是:语法错误. 事实上,我们可以一同使用 DISTINCT 和 C ...

  6. Java应用开发的一条经验

    一旦为应用建立良好的基础设施, 后续的开发就会变得容易而快速.  这些基础设施包括: 1.   线程池的建立.配置: 在 JDK 并发库的基础上建立更适合于应用的并发使用接口: 2.   跨多数据源的 ...

  7. python高级编程之(类级):子类内建类型

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #类级 #在2.2中,提出了类型(type0与类(class)统一( ...

  8. 使用SqlCacheDependency依赖项让数据库变化后缓存失效

    SqlCacheDependency可以使缓存在数据库或者数据库某张表或者字段变化后让指定缓存失效.对于一些需要及时显示的信息比较有用. 需要.net2.0以后设sql server2005及以后版本 ...

  9. 2014 (多校)1011 ZCC Loves Codefires

    自从做了多校,整个人都不好了,老是被高中生就算了,题老是都不懂=-=原谅我是个菜鸟,原谅我智力不行.唯一的水题. Problem Description Though ZCC has many Fan ...

  10. hdu 2825 Wireless Password(ac自己主动机&amp;dp)

    Wireless Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...