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