为PHP安装SQL Server支持

一、前言

一晃10年+过去,某天要测试下AWS的SCT工具对Microsoft SQL Server(以下简称MSSQL)的schema迁移,顺便发现,PHP居然取消了默认对MSSQL的支持,没办法一条命令就装好了。现在PHP混到要靠微软来给开源社区贡献驱动的程度了。

幸好微软已经拥抱开源了,Linux版本DotNET framework,Linux版本SQL Server,Windows 10上的Linux Subsystem,Windows的新Terminal,微软Azure上的一堆Linux服务器,MacOS上的VSCode。等等等。。。。

那么走起来,装一下驱动。

二、准备工作

环境在AWS上,选择EC2实例的Amazon Linux 2的AMI镜像。这个Amazon Linux是基于CentOS深度定制的,所以还是rpm体系,不是debian系。

首先是MSSQL odbc和cli的安装。执行如下命令。注:Amazon Linux 2和CentOS7系列对应。CentOS8太新,还没有对应的。

curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
ACCEPT_EULA=Y yum install msodbcsql17 -y
ACCEPT_EULA=Y yum install mssql-tools -y
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

这个过程还是挺有意思的,因为微软的德性就是CLI安装也来个End User License Agreement(EULA)让你确认下哈。安装好了后,用如下命令验证下MSSQL的Linux命令行客户端是不是装好了。

sqlcmd

能打印出全部help信息就是客户端装好了。

三、安装PHP包依存性包

执行如下命令安装一堆依存性包。

yum install php php-pdo php-xml php-pear php-devel re2c gcc-c++ gcc unixODBC-devel

注意,那个gcc必须要装,一会现场编译的。

四、安装SQL驱动

前边通过yum装了PHP Pear,也就是PHP版本的Python pip。下一步该从代码安装并现场编译了。

pecl install sqlsrv
pecl install pdo_sqlsrv

整个过程自动的,如果前边都OK,不缺少包和库的话,不应该出错。

五、加载

执行如下命令,把编译好的so库给load进来。

touch /etc/php.d/30-pdo_odbc.ini
echo 'extension=sqlsrv.so' >> /etc/php.d/30-pdo_odbc.ini
echo 'extension=pdo_sqlsrv.so' >> /etc/php.d/30-pdo_odbc.ini

这里用到的/etc/php.d是配置文件目录,任何文件放进去,本目录是被整体include的。重启服务。

systemctl restart php-fpm
systemctl restart httpd

六、测试

最后验证下,看加载生效的清单里边是否出现sqlsrv和pdo_sqlsrv这两个扩展。

php -m

至此PHP可以调用MSSQL了!去验证下代码吧!

全文完。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.