thinkphp连接mssql以及查询中文乱码问题

首先说下个人环境,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;

网上有人说$result[]   =   $row; 
改成:
$result[] = auto_charset($row, gb2312, utf8)  可是我试下是不行的。
相关文章
相关标签/搜索