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

首先说下我的环境,thinkphp版本3.1  php版本5.2.6  sqlserver2005  mysql版本5.2  

最近做一个项目需要连接已有项目的sqlserver数据库来得到一些数据,我们直接的数据库是mysql 所以就需要切换数据库连接。之前没整过这个,现在查开发手册,发现切换不同的mysql数据库里面介绍的挺简单,实现起来也挺容易。但是配置链接mssql就有点问题了。于是乎在网上查各种资料,也是少的可怜,且大部分都是粘贴复制同一个人的,而且介绍的还不详细。配置不成功。于是乎继续查手册,看看能不能发现点蛛丝马迹。还真让我发现了。废话不多说,直接上代码:配置文件里面

//'配置项'=>'配置值'
'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' 

注意最下面一行代码。对这个就是连接mssql语句的配置语句,sanyue为数据库密码,@是个分隔符,Admin是我本机的名字,test是我的mssql数据库

当然你要确保ThinkPHP\Lib\Think\Db\Driver下有DbMssql.class.php这个驱动,没有的话去github上下一个,网上有的下载的有问题。

当然在配置前肯定是要开启mssql支持的,查看是不是支持就要看看phpinfo()函数输出的有没有mssql了,如果没有就在配置文件中修改下,把下面两行前面的”;“去掉。

extension=php_mssql.dll

extension=php_pdo_mssql.dll

当然还要开启mssql.allow_persistent = Off

将Off变成on

如果还不行,那就去下载去mssql官网下载,得到的是一个自解压的exe,运行解压后会获取好多dll,其中52表示5.2版本的php,53表示5.3版本的php,nt表示线程安全的,nts表示非线程安全的,vc6、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)  但是我试下是不行的。

 

转载于:https://my.oschina.net/qqwang/blog/152994

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值