一、前言
一晃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了!去验证下代码吧!
全文完。