您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > Yii Framework

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

作者:UncleToo  来源:原创  日期:2014-01-20 7:46:21
收藏  评论:( 0 )  阅读:3173

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


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

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

<?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并在整个程序中访问。

<?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自定义比编写循环或者在模型类中切换数据库实现。

<?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数据库


如果你还有其他更好的方式实现这一功能的话可以留言参与讨论。



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/yii/797.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论