Yii框架如何使用两个数据库
Yii框架如何使用两个数据库
daniel-john 发表于4年前
Yii框架如何使用两个数据库
  • 发表于 4年前
  • 阅读 94
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

因为我要从sqlserver2008导入数据到mysql中,但是由于字段内容不同,需要程序处理,故需要两个数据库连接。

我的是php5.3.0

用phpinfo()查看phpapi为 200906 ts vc6

微软下载sqlsrv的php扩展2.0版本

在php.ini中加上以下两行

extension=php_pdo_sqlsrv_53_ts_vc6.dll

extension=php_sqlsrv_53_ts_vc6.dll

重启apache.(注5.3以上不支持mssql扩展)

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

共有 人打赏支持
粉丝 15
博文 117
码字总数 55611
×
daniel-john
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: