CentOS 7下ODBC Driver17引发冲突,如何安装ODBC13及对应PHP驱动
解决CentOS 7上ODBC Driver 13与PHP驱动的安装冲突问题
我来帮你搞定这个ODBC Driver版本冲突的问题——自从Driver17发布后,不少依赖旧版本的开发者都踩过这个坑,咱们一步步来解决:
1. 先锁定ODBC Driver版本,杜绝自动升级到17
首先得让系统“记住”我们要固定用Driver13,不能偷偷升级到17。我们用yum的版本锁定插件来实现:
- 先安装版本锁定工具:
sudo yum install yum-plugin-versionlock - 如果你还没装Driver13,可以先执行下面的命令查看可用的13版本包:
你会看到类似sudo yum list msodbcsqlmsodbcsql.x86_64 13.1.9.2-1的条目,把这个完整版本号记下来,然后执行锁定命令:
这样系统以后就不会再自动把Driver13更新到17了。sudo yum versionlock msodbcsql-13.1.9.2-1.x86_64
2. 安装ODBC Driver 13(确保不会拉到17版本)
接下来安装Driver13,这里要注意禁用Driver17相关的源,避免安装时自动下载最新版:
- 先添加微软官方为CentOS 7提供的软件源(你可以通过官方指引创建
/etc/yum.repos.d/mssql-release.repo配置文件) - 禁用Driver17相关的源:
sudo yum-config-manager --disable msodbcsql17 mssql-server-2017 mssql-server-2019 - 最后安装指定版本的Driver13:
这里一定要指定版本号,确保装的是13.x而不是最新的17.x。sudo ACCEPT_EULA=Y yum install msodbcsql-13.1.9.2-1
3. 安装对应版本的PHP驱动(关键!版本必须匹配)
ODBC Driver13对应的PHP sqlsrv驱动是5.3.x版本(不同PHP小版本对应具体驱动版本,比如PHP7.1/7.2都可以用5.3.0),别装错了:
- 先安装编译驱动需要的依赖:
sudo yum install php-devel gcc gcc-c++ - 前往微软官方的msphpsql项目,下载适配ODBC Driver13的5.3.x版本的sqlsrv和pdo_sqlsrv驱动源码包,下载完成后解压到本地目录
- 解压并编译安装sqlsrv驱动:
cd sqlsrv-5.3.0 # 这里替换成你实际解压的目录名 phpize ./configure --with-php-config=/usr/bin/php-config make && sudo make install - 接着编译安装pdo_sqlsrv驱动:
cd ../pdo_sqlsrv-5.3.0 # 同样替换成实际解压的目录名 phpize ./configure --with-php-config=/usr/bin/php-config make && sudo make install - 配置PHP加载这两个驱动:
在PHP的扩展配置目录(通常是/etc/php.d/)创建配置文件:echo "extension=sqlsrv.so" | sudo tee /etc/php.d/30-sqlsrv.ini echo "extension=pdo_sqlsrv.so" | sudo tee /etc/php.d/30-pdo_sqlsrv.ini - 重启你的Web服务(根据你用的是PHP-FPM还是Apache):
# PHP-FPM的情况 sudo systemctl restart php-fpm # Apache的情况 sudo systemctl restart httpd
4. 验证安装是否成功
最后用命令行检查驱动是否加载成功:
php -m | grep -E "sqlsrv|pdo_sqlsrv"
如果输出里能看到这两个模块,说明安装没问题了!
另外,如果之前你尝试安装过Driver17,记得先清理残留包:
sudo yum remove msodbcsql17
这样就能确保系统一直稳定使用Driver13和对应的PHP驱动,不会再出现自动升级导致的冲突啦。
内容的提问来源于stack exchange,提问作者Loom
相关产品推荐
相关产品推荐

