php教程

超轻量级php框架startmvc

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

更新时间:2020-03-16 13:44:37 作者:startmvc
本文实例讲述了ZendFramework框架实现连接两个或多个数据库的方法。分享给大家供大家参考

本文实例讲述了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_;
 } 
}

ZendFramework 连接 两个 多个 数据库