一、安装相关依赖

1.1 安装微软源

$ curl -s -o /tmp/prod.repo https://packages.microsoft.com/config/rhel/7/prod.repo

1.2 防止冲突先卸载原有版本(可选)

$ yum remove -y unixODBC 

1.3 安装驱动(三个都要装上,缺一不可)

$ yum install -y msodbcsql mssql-tools unixODBC-devel

二、编译pdo_sqlsrv插件

2.1 下载pdo_sqlsrv扩展包

$ wget http://pecl.php.net/get/pdo_sqlsrv-5.9.0.tgz

2.2 解压编译

$ tar xf pdo_sqlsrv-5.9.0.tgz
$ cd pdo_sqlsrv-5.9.0

2.3 预编译

$ /usr/bin/phpize
$ ./configure --with-php-config=/usr/bin/php-config

2.4 编译安装

$ make && make install

三、添加pdo_sqlsrv扩展

本文是使用yum安装的php、php-fpm,相关配置文件路径可能与各路大神们的环境不太相同(根据自己环境找到相关配置文件)。

  • /etc/php.ini 配置文件中添加 pdo_sqlsrv.so 扩展。
extension=pdo.so
extension=pdo_sqlsrv.so

pdo_sqlsrv.so 是sqlserver扩展,需要在 pdo.so 扩展之前加载,否则会出现如下报错

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_sqlsrv.so' - /usr/lib64/php/modules/pdo_sqlsrv.so: undefined symbol: php_pdo_register_driver in Unknown on line 0
  • 重启php-fpm服务
$ systemctl restart php-fpm

四、验证扩展是否正确安装

  • 验证扩展是否成功安装
$ php -m | grep pdo_sqlsrv

php-pdo_sqlsrv-1.png

这里可以看到 pdo_sqlsrv扩展已经添加到php中了。

但是又出现了PHP Warning: Module 'PDO' already loaded in Unknown on line 0的Warning信息。

经过排查,发现在 /etc/php.d/pdo.ini 配置文件中也引用了 pdo.so 扩展:

php-pdo_sqlsrv-2.png

/etc/php.d/pdo.ini 中引用的 pdo.so 扩展注释,只保留 /etc/php.ini 中的此扩展即可。

注释后重启php-fpm,重新查看php扩展,此时Warning信息就没出现了。

php-pdo_sqlsrv-3.png

  • 在Web端查看PHP信息

php-pdo_sqlsrv-4.png