要想使用 PHP 连接 SQLServer 需要安装 PHP 的 sqlsrv 的扩展以及 SQLServer 的驱动软件两个东西。注意这是两个是不同的安装包。
安装SQLServer驱动
查看驱动与PHP版本的对应关系:版本资料介绍
以上两张图分别帮我们提供了在进行扩展及安装包选择时的依据。我的版本是PHP7.3,因此,ODBC的版本要选择17,否则安装后也仍然会提示缺少扩展。
这里以Docker PHP7.3的版本以及 Aliyun Linux 2.1903 LTS 64位为例介绍安装步骤。
Docker PHP7.3
在上述安装连接中,我们选择 Debian 版本进行安装操作:
sudosucurl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -#Download appropriate package for the OS version#Choose only ONE of the following, corresponding to your OS version#Debian 8 (only supported up to driver version 17.6)curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list #Debian 9curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list #Debian 10curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list #Debian 11curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list exitsudo apt-get update sudoACCEPT_EULA=Y apt-get install -y msodbcsql17 # optional: for bcp and sqlcmdsudoACCEPT_EULA=Y apt-get install -y mssql-tools echo'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc # optional: for unixODBC development headerssudo apt-get install -y unixodbc-dev # optional: kerberos library for debian-slim distributionssudo apt-get install -y libgssapi-krb5-2
上文提供了不同的Debian 版本,此处我们选择 Debian 11 。
检查是否安装成功:
odbcinst -q-d-n"ODBC Driver 17 for SQL Server"
注意,这里的 UsageCount 当这个数值变为0时,即使你已经安装好了这个驱动,也会报找不到驱动。
卸载方法:
apt-get remove msodbcsql17 apt-get remove mssql-tools 同时删除 ./~bashrc 中的export path
Aliyun Linux 2.1903 LTS 64
因为Aliyun Linux 系统是兼容Red Hat 7.0 所以我们在这里选择7.0版本进行安装:
sudosu#Download appropriate package for the OS version#Choose only ONE of the following, corresponding to your OS version#Red Hat Enterprise Server 6 (only supported up to driver version 17.7)curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo #Red Hat Enterprise Server 7 and Oracle Linux 7curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo #Red Hat Enterprise Server 8 and Oracle Linux 8curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo exitsudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflictssudoACCEPT_EULA=Y yum install -y msodbcsql17 # optional: for bcp and sqlcmdsudoACCEPT_EULA=Y yum install -y mssql-tools echo'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc # optional: for unixODBC development headerssudo yum install -y unixODBC-devel
安装 PHP sqlsrv 扩展
Docker 安装
## 创建并初始化 /usr/src/php目录docker-php-source extract ## 此处可环卫你自己的pathcd /tmp ## 下载扩展 下载扩展地址:https://pecl.php.net/package/pdo_sqlsrvcurl-L-o /tmp/pdo_sqlsrv.tgz https://pecl.php.net/get/pdo_sqlsrv-5.9.0.tgz curl-L-o /tmp/sqlsrv.tgz https://pecl.php.net/get/sqlsrv-5.9.0.tgz ## 解压tar zxvf pdo_sqlsrv.tgz tar zxvf sqlsrv.tgz ## 移动到php扩展目录 mv pdo_sqlsrv-5.9.0 /usr/src/php/ext/pdo_sqlsrv mv sqlsrv-5.9.0 /usr/src/php/ext/sqlsrv ## 安装扩展docker-php-ext-install pdo_sqlsrv docker-php-ext-install sqlsrv ## 查看扩展是否安装上php -m |grep sqlsrv ## 重启php容器,扩展已经安装完毕
Aliyun Linux 2.1903 LTS 64
此处PHP因为我是使用的 yum 直接安装的,因此在安装扩展的时候也是使用 yum 的方式进行安装,推荐大家使用这种方式进行安装,可以省掉很多不必要的麻烦。
#安装yum install php73-php-sqlsrv #检查是否安装成功php -m |grep sqlsrv #重启systemctl restart php73-php-fpm
常见问题
1、TSL版本导致的连接安全性问题
[08001][Microsoft][ODBC Driver 17for SQL Server]SSL Provider: [OpenSSL library could not be loaded, make sure OpenSSL 1.0 or 1.1 is installed] [08001][Microsoft][ODBC Driver 17for SQL Server]Client unable to establish connection (0) (SQLDriverConnect)
解决方法:
找到/etc/ssl/openssl.cnf 后,找到 system_default_sect 节点后,加入或修改为以下即可:
[system_default_sect] MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=2