首先说下个人环境,thinkphp版本3.1 php版本5.2.6 sqlserver2005 mysql版本5.2 php
最近作一个项目须要链接已有项目的sqlserver数据库来获得一些数据,咱们直接的数据库是mysql 因此就须要切换数据库链接。以前没整过这个,如今查开发手册,发现切换不一样的mysql数据库里面介绍的挺简单,实现起来也挺容易。可是配置连接mssql就有点问题了。因而乎在网上查各类资料,也是少的可怜,且大部分都是粘贴复制同一我的的,并且介绍的还不详细。配置不成功。因而乎继续查手册,看看能不能发现点蛛丝马迹。还真让我发现了。废话很少说,直接上代码:配置文件里面 mysql
//'配置项'=>'配置值'
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost',// 服务器地址
'DB_NAME' => 'clinic' , // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '***', // 密码
'DB_PORT' => 3306, // 端口
'DB_PREFIX' => '', // 数据库表前缀
'DB_PREFIX' => '',
'DB_DEPLOY_TYPE' => 0, // 数据库部署方式 0 集中式 1 分布式 0
'DB_RW_SEPARATE' => FALSE, // 数据库是否须要读写分离 分布式部署下有效
'DB_MASTER_NUM' => 1, // 设置读写分离后 主服务器数量 1
//'DB_SLAVE_NO' => , // 设置读写分离后 指定从服务器序号(3.1新增)
'DB_SQL_BUILD_CACHE'=> FALSE, // 数据库查询的SQL建立缓存 FALSE
'DB_SQL_BUILD_QUEUE'=> 'file', // SQL缓存队列的缓存方式 file
'DB_SQL_BUILD_LENGTH'=> 20, // SQL缓存的队列长度 20
'DB_SQL_LOG' => FALSE, // 是否开启SQL日志记录(3.1新增) FALSE
'DB_CONFIG2' => 'mssql://sa:sanyue@Admin/test'
c++
注意最下面一行代码。对这个就是链接mssql语句的配置语句,sanyue为数据库密码,@是个分隔符,Admin是我本机的名字,test是个人mssql数据库
git
固然你要确保ThinkPHP\Lib\Think\Db\Driver下有DbMssql.class.php这个驱动,没有的话去github上下一个,网上有的下载的有问题。
github
固然在配置前确定是要开启mssql支持的,查看是否是支持就要看看phpinfo()函数输出的有没有mssql了,若是没有就在配置文件中修改下,把下面两行前面的”;“去掉。 sql
extension=php_mssql.dll thinkphp
extension=php_pdo_mssql.dll 数据库
固然还要开启mssql.allow_persistent = Off windows
将Off变成on 缓存
若是还不行,那就去下载去mssql官网下载,获得的是一个自解压的exe,运行解压后会获取好多dll,其中52表示5.2版本的php,53表示5.3版本的php,nt表示线程安全的,nts表示非线程安全的,vc六、vc9表示的是编译这个dll所使用的vc++编译器版本,基本上大多数时候,选vc6的;将本身php对应的扩展,好比个人是php_sqlsrv_52_nts_vc6.dll放到php安装目录ext文件夹下
而后修改php.ini在适当的地方加上一行:
extension=php_sqlsrv_52_nts_vc6.dll
固然这些以前你都要确保C盘windows文件夹里面有ntwdblib.dll,php_mssql.dll这两个dll,以上操做昨晚基本就应该能够支持mssql了,这时只须要在thinkphp里面新创建一个model类,好比个人
class AdvModel extends Model
{
public function querySQL($sql)
{
$result=$this->db(1,"DB_CONFIG2");
$result=$this->query($sql);
return $result;
}
}在控制器就能够调用querySQl来获取查询结果
中文乱码解决办法是在DbMssql.class.php中修改getALL函数, $result[] = $row;赋值前先执行下边的代码
$ct=count($row);
foreach($row as $key=>$value)
{
$row[$key]=iconv('gbk','utf-8',$row[$key]);
}
$result[] = $row;