根本原因是odbc驱动、pdo_sqlsrv扩展、php.ini配置三者未对齐;须先装unixodbc-devel等编译依赖,再装msodbcsql17驱动,然后用pecl install sqlsrv-5.10.1和pdo_sqlsrv-5.10.1指定路径安装,并在php.ini中手动添加extension=绝对路径,最后通过php -m、phpinfo()及new pdo实测三重验证。

PHP8连接SQL Server时提示“could not find driver”,根本原因是pdo_sqlsrv扩展未正确加载,而不仅仅是PHP版本不兼容——必须同步解决ODBC驱动、扩展编译、php.ini配置三个环节的错位问题。
确认系统级依赖是否齐备
先执行命令检查基础工具链:yum list installed | grep -E "gcc|make|php-devel|unixODBC-devel"。缺任何一项都会导致后续pecl编译失败,尤其是unixODBC-devel缺失时,phpize会直接报“Cannot find header file(s) for sqlsrv”。
若未安装,一次性补全(以CentOS/RHEL系为例):yum install -y gcc make php74-devel unixODBC-devel。注意:这里php74-devel要替换成你实际使用的PHP版本对应的devel包,比如PHP 8.2就用php82-devel。
【宝塔用户必须跳过系统默认路径】:宝塔面板的phpize和php-config不在/usr/bin/下,而是类似/www/server/php/82/bin/phpize这样的路径,后续所有pecl命令都要显式指定该路径。
安装微软官方ODBC驱动
优先尝试msodbcsql17(SQL Server 2019+推荐):ACCEPT_EULA=Y yum install -y msodbcsql17。
装完立刻验证:cat /etc/odbcinst.ini | grep -A 2 "ODBC Driver 17 for SQL Server",确认输出中包含Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.so且该so文件真实存在(ls -l /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.so)。
如果PHP-FPM启动即崩溃,日志出现undefined symbol: OPENSSL_sk_num,说明内核或openssl版本冲突,立即卸载:yum remove msodbcsql17,然后手动下载msodbcsql13的rpm包并yum localinstall安装。
用PECL精准安装适配版扩展
第一步:进入PHP对应bin目录,例如PHP 8.2环境:cd /www/server/php/82/bin。
第二步:强制指定旧稳定版(新版常触发segfault):./pecl install sqlsrv-5.10.1 → 等待编译完成,记下最后输出的扩展路径(如/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/sqlsrv.so)。
第三步:同样安装pdo_sqlsrv:./pecl install pdo_sqlsrv-5.10.1 → 注意此时不要选“auto”配置,手动输入no跳过自动写入php.ini,我们自己控制加载位置。
第四步:编辑php.ini,在末尾添加两行:extension=/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/sqlsrv.so 和 extension=/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/pdo_sqlsrv.so。
验证扩展是否真正生效
方法一:命令行验证:php -m | grep -E "(sqlsrv|pdo_sqlsrv)",必须同时输出两行,缺一不可。
方法二:Web环境验证更关键——新建info.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索pdo_sqlsrv,确认“PDO drivers”列表里包含sqlsrv,且下方有“pdo_sqlsrv support enabled”字样。
方法三:终极验证,写一段连接测试脚本:$pdo = new PDO("sqlsrv:server=127.0.0.1;Database=master", "sa", "password"); echo "Connected";,能输出"Connected"才算真正打通。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











