Ubuntu 16升级后PHP 7.1/7.2连接MS-SQL报错求助
解决Ubuntu 16.04下PHP连接MS-SQL Server的ODBC驱动问题
别急,我来一步步帮你搞定这个问题——Ubuntu 16.04搭配PHP 7.x连接SQL Server,核心就是先装对Microsoft的ODBC驱动,再配置好PHP扩展,咱们一步步来:
第一步:安装Microsoft ODBC Driver 13 for SQL Server
- 先添加Microsoft官方软件源,这样能直接通过apt安装驱动:
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
- 更新apt缓存,然后安装驱动(注意要同意许可协议):
apt-get update ACCEPT_EULA=Y apt-get install msodbcsql13
这里的ACCEPT_EULA=Y是强制同意微软的许可协议,必须加上才能完成安装。
第二步:安装PHP的SQL Server扩展
PHP需要通过sqlsrv和pdo_sqlsrv扩展来连接SQL Server,咱们用pecl来安装:
- 先安装依赖工具:
apt-get install php-pear php-dev unixodbc-dev
unixodbc-dev是ODBC的开发依赖,少了它pecl安装扩展会失败。
2. 安装扩展:
pecl install sqlsrv pdo_sqlsrv
如果是PHP 7.2,这个命令同样适用,pecl会自动适配对应版本。
第三步:启用PHP扩展
安装完扩展后,需要让PHP加载它们:
- 先找到你的PHP配置文件位置,运行
php --ini就能看到Loaded Configuration File的路径,比如/etc/php/7.1/cli/php.ini(命令行PHP)或者/etc/php/7.1/apache2/php.ini(Apache下的PHP)。 - 编辑这个配置文件,在末尾添加两行:
extension=sqlsrv.so extension=pdo_sqlsrv.so
或者用命令直接添加,省得手动编辑:
# 针对命令行PHP echo "extension=sqlsrv.so" >> /etc/php/7.1/cli/php.ini echo "extension=pdo_sqlsrv.so" >> /etc/php/7.1/cli/php.ini # 如果是Apache环境,还要同步修改apache的配置文件 echo "extension=sqlsrv.so" >> /etc/php/7.1/apache2/php.ini echo "extension=pdo_sqlsrv.so" >> /etc/php/7.1/apache2/php.ini
第四步:验证安装并重启服务
- 运行
php -m | grep sqlsrv,如果输出里有sqlsrv和pdo_sqlsrv,说明扩展加载成功了。 - 如果用的是Apache或者Nginx,记得重启web服务让配置生效:
# Apache systemctl restart apache2 # Nginx(如果用php-fpm的话) systemctl restart php7.1-fpm systemctl restart nginx
额外注意点
- 确保你的Ubuntu 16.04是64位系统,微软的ODBC驱动不支持32位系统。
- 如果安装过程中遇到权限问题,记得在命令前加
sudo(比如sudo apt-get update),毕竟普通用户没权限修改系统配置。
内容的提问来源于stack exchange,提问作者John




