You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04+PHP8.1环境PDO_SQLSRV驱动找不到问题求助

问题分析与排查步骤

你的核心问题是CLI模式下PHP能加载pdo_sqlsrv,但Apache运行的PHP无法加载该驱动,结合你的操作步骤,以下是关键问题和解决方法:

1. 驱动文件名版本不匹配

你在步骤2中新建的30-pdo-sqlsrv文件里写的是extension=php_pdo_sqlsrv_82_nts.so,但你使用的是PHP8.1,下载的也是Ubuntu2204-8.1的驱动包,正确的驱动文件名应该是php_pdo_sqlsrv_81_nts.so(带81而非82)。这个错误会导致Apache无法找到对应的驱动文件,自然无法加载。

修正方法:
编辑/etc/php/8.1/apache2/conf.d/30-pdo-sqlsrv,将内容改为:

extension=php_pdo_sqlsrv_81_nts.so

2. 统一Apache的PHP扩展配置方式

你同时在php.ini和conf.d目录下的文件中配置扩展,容易出现冲突或加载顺序问题。建议将所有sqlsrv相关的扩展配置统一放到conf.d目录下:

  • 新建20-sqlsrv.ini文件在/etc/php/8.1/apache2/conf.d/,写入:
    extension=php_sqlsrv_81_nts.so
    
  • 删除/etc/php/8.1/apache2/php.ini中你添加的extension=php_sqlsrv_81_nts.so这一行。

这样配置更符合Ubuntu下PHP的扩展管理规范,避免加载顺序问题。

3. 检查驱动文件权限

确保复制到/usr/lib/php/20210902的驱动文件权限正确,Apache的运行用户(通常是www-data)需要有读取权限:
执行命令修改权限:

sudo chmod 644 /usr/lib/php/20210902/php_sqlsrv_81_nts.so
sudo chmod 644 /usr/lib/php/20210902/php_pdo_sqlsrv_81_nts.so
sudo chown root:root /usr/lib/php/20210902/php_sqlsrv_81_nts.so
sudo chown root:root /usr/lib/php/20210902/php_pdo_sqlsrv_81_nts.so

4. 验证ODBC依赖是否安装

Microsoft SQL Server PHP驱动依赖ODBC驱动,你需要确保已经安装了正确版本的ODBC驱动(msodbcsql17或msodbcsql18):
执行以下命令检查:

dpkg -l | grep msodbcsql

如果没有输出,说明未安装,可执行以下命令安装(以msodbcsql18为例):

sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt update
sudo ACCEPT_EULA=Y apt install -y msodbcsql18

5. 重启Apache并验证

完成以上修改后,重启Apache:

sudo service apache2 restart

然后重新查看phpinfo页面,检查是否出现pdo_sqlsrv的相关模块信息,再运行你的测试代码验证连接。


内容的提问来源于stack exchange,提问作者LMORSE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:11:26