Yii框架如何使用两个数据库

最近有个项目比较麻烦,客户原来的系统是基于Microsoft SQL Server数据库的,现在要求采用Yii框架和MySQL数据库在这基础上新开发一些功能,这就意味着这个系统要同时访问两个数据库,我们采用如下的方法解决的:


首先我们需要安装wamp服务,并且在wamp中打开MS SQL扩展服务【相关文章:在WAMP中安装Microsoft SQL Server驱动】。然后使用Yii连接数据库

1、找到protected/config文件夹并打开main.php文件,添加如下代码来连接MySQL和MSSQL。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
'db' => array (   // default mysql connection
  'connectionString'  =>  'mysql:host=localhost;port=3306;dbname=db_name' ,
  'emulatePrepare'  => true,
  'username'  =>  'db_username' ,
  'password'  =>  'db_password' ,
  'charset'  =>  'utf8' ,
  'tablePrefix'  => 'tbl_' ,   // if have prefix in database tables
),
'msdb' => array // microsoft sql server connection
  'class'  =>  'CDbConnection' ,
  'connectionString'  =>  'sqlsrv:Server=host_name or ip_address;Database=db_name' ,
  'username'  =>  'db_username' ,
  'password'  =>  'db_password' ,
  'charset'  =>  'GB2312' ,
),
?>


2、现在,我们需要通过CDbCommand连接MSSQL并在整个程序中访问。

1
2
3
4
5
6
7
8
<?php
$company_name =Yii::app()->msdb->createCommand( "Select TOP 1 CompanyName from Company_Details Where CompanyID=" ezeelive")->queryRow();
if (isset( $company_name ) && ! empty ( $company_name [ "CompanyName" ])):
  echo  $company_name [ "CompanyName" ];  // it will print company name Ezeelive Technologies
else :
  echo  '' ;
end  if ;
?>


3、在数据处理过程中,免不了会出现把数据从一个数据库的表复制/插入到另一个数据库的表,此时我们可以使用createCommand自定义比编写循环或者在模型类中切换数据库实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class  Company  extends  CActiveRecord
{
  public  function  init()
  {
  $this ->attachEventHandler( 'OnBeforeSave' ,    array ( $this , 'switchToWriter' ));
  $this ->attachEventHandler( 'OnAfterSave' ,    array ( $this , 'switchToReader' ));
  }
  public  function  switchToWriter()
  {
  self:: $db =Yii::app()->db;
  return  true;
  }
  public  function  switchToReader()
  {
  self:: $db =Yii::app()->msdb;
  return  true;
  }
  //...
}
?>

在这个例子中,当需要执行数据提取或插入时,数据库的连接自动改变。使用switchToReader函数从SQL Server数据库获取数据,使用switchToWriter函数插入或保存数据到MySQL数据库

http://www.uncletoo.com/html/yii/797.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值