文档章节

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

daniel-john
 daniel-john
发布于 2014/04/21 17:26
字数 417
阅读 96
收藏 1

因为我要从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数据库

© 著作权归作者所有

共有 人打赏支持
daniel-john
粉丝 17
博文 132
码字总数 56017
作品 0
其他
程序员
这些最热门的 PHP 框架,哪一款是你的菜?

原文出处:opensource 译文出处:开源中国—两味真火 PHP 是世界上最流行的编程语言之一,广泛用于主要的项目中。例如,Facebook 就是利用 PHP 来创建和维护他们的内部系统;WordPress 内部基...

opensource
2016/12/27
0
0
yii2 window composer 安装

最近在学习PHP,着手找一个能快速上手的框架来学习。一开始看兄弟连视频时候讲师推荐ThinkPHP。于是我选择了ThinkPHP来尝试,这个框架的上手难度系数不大,能快速开发一款应用。适合小型的企...

Gjanuary
2017/06/06
0
0
Yii 2 —— 密码加密算法

1.1 密码加密算法 参考文档: 1、更新后的 PHP: 现代 PHP 中的密码安全性; 2、http://php.net/manual/zh/function.password-hash.php 3、http://php.net/manual/zh/function.password-veri......

tywali
06/29
0
0
reids之YII常见使用问题

首先YII的框架包中并不含redis部分,需要自己配置和安装。 第一部分:Mac下YII框架的redis安装与配置 1.安装redis 方法一: 在没有安装YII的时候,可以通过修改composer的json文件实现修改安...

0_0Loong
2017/10/19
0
0
Yii2 实例管理

Yii2 实例管理 Yii2框架没有提供类似ZendFramework3中提供的ServiceManager.那么Yii2框架是如何管理对象实例的呢? 长时间使用Yii2框架的童鞋一定已经适应了对象中的public变量,以及一个来自y...

Vett
2017/12/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 恨不得给你买张飞机挂票

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席灵魂师:分享张希/曹方的单曲《认真地老去》 来不及认真的年轻过,就认真的老去! 《认真地老去》- 张希/曹方 手机党少年们想听...

小小编辑
12分钟前
17
4
如何实现靠谱的分布式锁?

分布式锁,是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的,通过一个共享标识来确定唯一性,对共享标识进行修改时能够...

郑加威
今天
1
0
Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
4
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部