Apache•Mysql•PHP

ThinkPHP 5.0 连接SQL Server 数据库

字号+ 作者:hanyufeng 来源: 2017-10-06 09:10:00 我要评论( ) 阅读:

ThinkPHP 5 连接SQL Server 数据库...

一、数据库连接设置

首先需要设置好PHP,确认安装了SQL Server 数据库扩展:

http://www.hanyu123.cn/content-12-132-1.html


在ThinkPHP 配置中设置数据库类型为'sqlsrv':

// 数据库类型        
'type'            => 'sqlsrv',

数据库编码最好使用utf8:

// 数据库编码默认采用utf8
 'charset'         => 'utf8',


二、SQL语句书写

读取MySQL中的中文名表格时,可以加``,也可以不加,都能正确读取,例如:

dump(Db::name('hsk词汇等级大纲')->select());
dump(Db::name('`hsk词汇等级大纲`')->select());

读取SQL Server 时则不能加``,或者使用[]:

dump(Db::name('hsk词汇等级大纲')->select());
dump(Db::name('[hsk词汇等级大纲]')->select());

中文字段名也是如此。


三、中文乱码问题的解决

如果设置了utf8编码,读取中文字段时,v值可以正常显示,但k值还是中文乱码:

439619a2-57a3-4d4e-9d57-5c0c178773c7.png

读取MySQL数据库的中文名数据表和中文字段时,k值和v值都可以正确显示。

但即使SQL Server 是utf8编码,k值也还需要在程序中再转码一次:

$result=$this->toutf8($result);

//转码函数
public function toutf8($Result){
        
        $Row=array();
        $key1=array_keys($Result);
        $key2=array_keys($Result[$key1[0]]);
        foreach ($key2 as $k=>$v){
            $key2[$k]=iconv('gbk', 'utf-8', $v);
        }
        foreach ($Result as $k=>$v){
            $value1=array_values($v);
                $Row[$k]=array_combine($key2, $value1); 
        }
        return $Row;
    }




参考资料:

http://www.thinkphp.cn/topic/39279.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 使用Composer安装ThinkPHP

    使用Composer安装ThinkPHP

  • ThinkPHP 错误:Namespace declaration statement has to be the very first……

    ThinkPHP 错误:Namespa...

  • [ThinkPHP] var_dump() 和 dump() 的区别

    [ThinkPHP] var_dump()...

  • ThinkPHP 5.0 助手函数与3.x 版的对应关系

    ThinkPHP 5.0 助手函数...

  • ThinkPHP 5.0 教程

    ThinkPHP 5.0 教程