您现在的位置是:首页 > 文章内容文章内容

thinkphp 5 链接sqlserver数据库

lipeng2019-08-27 18:03:02PHP1人已围观


 

PHP天然就对MySQL有良好的支持,apache/iis/nginx + php +mysql 是大家常用的PHP开发环境,那么对于mysql,大家一定是很熟悉了,大多数PHP框架都是默认使用mysql数据库,但是有时候mysql并不能满足我们的项目需求,那么,我们就会考虑使用其它数据库如Oracle、SQL Server、MongoDB等代替mysql,博主之前一直用mysql,新进一家做游戏开发的公司,使用的是微软的SQL Server数据库,因为之前对SQL Server知之甚少,因此也小费了一番功夫,下面介绍一下thinkphp链接SQL Server的方法。

1.png

首先,链接数据库需要开启PHP对数据库的扩展,一般安装PHP都默认开启了mysql的扩展,同理,链接SQL Server数据库一样需要开启PHP SQL Server扩展,但是PHP 5.3以上版本已经不再支持MSSQL扩展,因此我们需要自己下载安装PHP SQL Server的扩展,如果你是windows 32位操作系统,推荐去微软官方下载(https://www.microsoft.com/en-us/download/details.aspx?id=20098), 但是本人使用的是windows7 67位操作系统,微软官方的扩展似乎并不兼容,所以颇费周折之后,终于找到了能够兼容的Sql Server扩展,下载地址 http://download.csdn.net/download/qq_21246605/9267143 这个包含了PHP 5.3、PHP5.4、PHP5.5、PHP5.6的32位64位的 NTS以及TS版本【这个很重要,PHP版本号,操作系统,NTS与TS均不能错】,想知道你的PHP是32位还是64位,是NTS还是TS请看phpinfo。

2.jpg

如上图可知博主是64位的 php5.6 nts版本,那么我需要的扩展是 php_pdo_sqlsrv_56_nts.dll 和 php_sqlsrv_56_nts.dll ,将下载的压缩包解压找到这两个文件,放在PHP的扩展目录ext文件夹内,编辑你的php.ini文件,添加extension=php_pdo_sqlsrv_56_nts.dll  extension=php_sqlsrv_56_nts.dll扩展【根据个人实际情况】,重启环境,此时我们能够找到pdo_sqlsrv以及sqlsrv扩展,说明我们的PHP Sql Server扩展已经成功开启,下面就可以使用PHP链接Sql Server了。

下面是Thinkphp 5链接Sql Server

在database.php文件中配置如下

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st // +----------------------------------------------------------------------
return [
    // 数据库类型
    'type'            => 'sqlsrv',
    // 服务器地址
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'test',
    // 用户名
    'username'        => 'peng',
    // 密码
    'password'        => '123456',
    // 端口
    'hostport'        => '1434',
    // 连接dsn
    'dsn'             => 'sqlsrv:server=127.0.0.1;database=test',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => '',
    // 数据库调试模式
    'debug'           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 自动读取主库数据
    'read_master'     => false,
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => false,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
    'sql_explain'     => false,
    // Builder类
    'builder'         => '',
    // Query类
    'query'           => '\\think\\db\\Query',
    // 是否需要断线重连
    'break_reconnect' => false,
    // 断线标识字符串
    'break_match_str' => [],
];


     注意:Sql Server 默认端口是1434,如果您修改了Sql Server端口,请在hostname里配置 例如Sql Server使用了1435端口,则配置为  'hostname'        => '127.0.0.1,1435'即可,配置完成后就可以使用thinkphp的Db类来链接操作Sql Server数据库了。


--thinkphp多数据库操作--

由于博主公司的项目涉及多数据库,可能有些小伙伴不太清楚如何使用thinkphp操作多数据库,那么这里也啰嗦一点吧。

我们通常链接数据库方法是  Db::table('TbName')->where('id',$id)->find();实际上这里省略了Db的connect方法,这个方法传入的是数据库配置,也就是默认的数据库配置文件的信息,因此我们链接多数据库就需要使用conne方法,传人对应的数据库配置就OK了,博主是新建了一个DbConfig类,里面对应各数据库的方法配置并返回各数据库配置信息,在使用Db类操作数据库时,只需要实例化DbConfig类并调用相应数据库的配置方法,得到配置参数并传如connect即可。


shared();
        $data['username'] = 'user'; //请配置数据库账户
        $data['password'] = 'pass'; //请配置数据库密码
        $data['database'] = 'UserDB';
        $data['dsn'] = "sqlsrv:server=".$data['hostname'].";database=".$data['database'];
        return $data;
    }
    
    public function ArticleDB(){
        $data = $this->shared();
        $data['username'] = 'user1'; //请配置数据库账户
        $data['password'] = 'pass1'; //请配置数据库密码
        $data['database'] = 'ArticleDB';
        $data['dsn'] = "sqlsrv:server=".$data['hostname'].";database=".$data['database'];
        return $data;
    }
}
/*如果我需要在控制器中使用Db类操作User数据库的UserLog表,则*/
$Config = new app\DbConfig();
$UserDBConf = $Config->UserDB();
Db::connect($UserDBConf)->table('UserLog')->where('UserID',$UserID)->field('Id,action,time')->select();
/*即可。*/




用户评论:

lipeng : 一年多前的公司用过TP5+SqlServer,当时写的文章,刚刚到就发了出来。 评论

我的名片

姓名:李鹏

职业:PHP开发工程师

现居:广东省-深圳市

Email:lipeng4203@163.com