Thinkphp安装支持sqlserver扩展(Linux)

概述

  • 环境:Linux(Centos6.8) + PHP5.6.22 + Mysql5.7 + apache2.4 + Thinkphp3.2
  • Thinkphp自带的Sqlser扩展无法正常使用,因此需要自己手动编写扩展文件
  • Linux的mssql扩展,只支持php7.0以下版本,因此,需要将php的版本降低到7以下
  • 需要安装扩展
    1. freetds
    2. mssql
    3. pdo_dblib

过程

安装freetds

该扩展,是为了是PHP支持mssql扩展

  1. 下载最新版本的freetds(当前是1.00.15版本),下载地址:http://www.freetds.org/software.html
    个人建议,不要在linux服务器上用wget下载该文件,最好用windows打开,用迅雷下载。

  2. 安装过程

$ tar -zxvf freetds-stable.tgz
$ cd freetds-1.00.15
$ ./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
$ make
$ make install
--with-tdsver:指定了连接sqlserver的版本
--enable-msdblib:是否允许Microsoft数据库函数库
  1. 安装成功,验证
$ cd /usr/local/freetds/bin
$ ./tsql -C
显示如下信息,表明freetds安装成功
安装PHP的mmsql扩展
  1. 找到服务器安装的PHP的版本的源码包,进入PHP的扩展目录:php-5.6.22/ext/mssql
  2. 执行安装过程:
$ /usr/local/php/bin/phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
$ make
$ make install 
安装成功之后,会在`/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226`目录生产相应的扩展的`.so`文件,然后需要在php.in文件中,在加载扩展中,添加:`extension=mssql.so`,即将`mssql`扩展开启了。
然后访问`phpinfo`查看确认`mmsql`扩展安装成功
安装PHP的pdo_dblib扩展

期安装过程,参考上面mmsql的安装过程,过程方式是一样的
在php.ini中开启pdo_dblib扩展,访问phpinfo查看扩展是否安装成功

编写自己支持的mssql扩展

Thinkphp自带的是没有mssql支持的DB扩展的,因此需要自己编写一份。
可以将ThinkPHP/Library/Think/Db/Driver/Sqlsrv.class.php拷贝一份为:Mssql.class.php,然后修改其中的连接即可。

/**
 * 解析pdo连接的dsn信息
 * @access public
 * @param array $config 连接信息
 * @return string
 */
protected function parseDsn($config){
    $dsn = '';
    if (isset($config['hostname']) && isset($config['hostport']) && isset($config['database'])) {
        $hostname = trim($config['hostname']);
        $hostport = trim($config['hostport']);
        $database = trim($config['database']);
        $dsn = "dblib:host={$hostname}:{$hostport};dbname={$database}";
    }
    return $dsn;
}

然后,将数据库连接中的连接类型设置为:mssql即可

'DB_TYPE'   => 'mssql', // 数据库类型
'DB_HOST'   => 'localhost', // 服务器地址
'DB_NAME'   => 'thinkphp', // 数据库名
'DB_USER'   => 'root', // 用户名
'DB_PWD'    => '123456', // 密码
'DB_PORT'   => 3306, // 端口
'DB_PREFIX' => 'think_', // 数据库表前缀 
'DB_CHARSET'=> 'utf8', // 字符集

附件

  1. freetds-patched.tar.gz(链接: http://pan.baidu.com/s/1jIIBa1g 密码: uy4r)
  2. Mssql.class.php(链接: http://pan.baidu.com/s/1o7SweLk 密码: eubb)