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

云服务器迁移至本地后,无法通过PHP+ODBC连接SQL Server

解决Ubuntu Apache环境下ODBC Driver 17连接SQL Server的08001错误

关键线索:OpenSSL版本不兼容

你遇到的偶尔出现的SSL Provider: OpenSSL library could not be loaded错误是核心原因——ODBC Driver 17 for SQL Server仅支持OpenSSL 1.0或1.1版本,而Ubuntu新版本默认搭载的OpenSSL 3.x会导致驱动无法加载,进而触发SQL state 08001连接失败。


修复步骤

1. 安装并锁定兼容的OpenSSL版本

# 安装OpenSSL 1.1
sudo apt-get install -y openssl=1.1.1* libssl1.1
# 锁定版本防止自动升级
sudo apt-mark hold openssl libssl1.1

2. 修复ODBC驱动的库依赖链接

检查驱动是否能找到OpenSSL库:

ldd /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.8.so.1.1 | grep ssl

如果输出显示not found,创建软链接:

sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/lib/libssl.so.1.1
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

3. 调整ODBC连接字符串

在你的PHP连接代码中添加明确的SSL参数,避免自动协商失败:

$conn = odbc_connect(
    "Driver={ODBC Driver 17 for SQL Server};Server=$serverName,1433;Database=$dbName;Uid={$connectionOptions['Uid']};PWD={$connectionOptions['PWD']};Encrypt=yes;TrustServerCertificate=no;",
    '',
    ''
);

临时测试可将TrustServerCertificate设为yes,但生产环境需配置合法证书

4. 确保Apache进程能访问依赖库

  • 验证Apache用户(www-data)的访问权限:
    sudo -u www-data ls /usr/lib/x86_64-linux-gnu/libssl.so.1.1
    
  • 在/etc/apache2/envvars中添加库路径:
    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
    
  • 重启Apache生效:
    sudo systemctl restart apache2
    

5. 用isql工具排除代码问题

直接用ODBC命令行工具测试连接,确认驱动和网络正常:

isql -v "Driver={ODBC Driver 17 for SQL Server};Server=你的数据库IP,1433;Database=你的库名;Uid=你的账号;PWD=你的密码"

如果isql能连接,说明问题出在PHP/Apache的环境配置;如果失败,继续排查防火墙或SQL Server的远程连接设置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:41:02