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

Ubuntu18.04升级后PHP7.2.5连接MSSQL失败的解决方法

解决Ubuntu 18.04 LTS升级后PHP7.2连接MSSQL失效的问题

我之前在升级Ubuntu版本后也碰到过一模一样的sqlsrv连接故障,结合你的PHP7.2环境,分享几个靠谱的排查修复步骤:

1. 重新适配安装sqlsrv扩展

Ubuntu18.04自带的sqlsrv扩展版本可能和PHP7.2不匹配,建议手动安装微软官方适配的版本:

  • 先导入微软的软件源密钥:
    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    
  • 添加Ubuntu18.04对应的微软PHP源:
    curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
    
  • 更新软件源并安装依赖:
    sudo apt-get update
    sudo ACCEPT_EULA=Y apt-get install msodbcsql17 mssql-tools unixodbc-dev
    
  • 安装适配PHP7.2的sqlsrv和pdo_sqlsrv扩展:
    sudo pecl install sqlsrv pdo_sqlsrv
    
  • 最后将扩展添加到PHP配置文件(注意区分CLI和Web环境的php.ini,比如Apache用/etc/php/7.2/apache2/php.ini,CLI用/etc/php/7.2/cli/php.ini):
    echo "extension=pdo_sqlsrv.so" | sudo tee -a /etc/php/7.2/apache2/php.ini
    echo "extension=sqlsrv.so" | sudo tee -a /etc/php/7.2/apache2/php.ini
    
  • 重启Web服务(比如Apache):
    sudo systemctl restart apache2
    

2. 验证ODBC驱动是否正确安装

sqlsrv依赖ODBC驱动,Ubuntu18.04需要用ODBC Driver 17 for SQL Server,执行以下命令检查:

odbcinst -j

输出里应该能看到ODBC Driver 17 for SQL Server的条目,如果没有,回到第一步重新安装msodbcsql17。

3. 排查网络和连接参数问题

  • 先测试服务器连通性,用nc命令检查MSSQL默认端口1433是否开放:
    nc -zv IP_OF_MY_SERVER 1433
    
  • 简化你的测试代码,添加更直观的错误输出:
    $serverName = "IP OF MY SERVER";
    $connectionOptions = array(
        "Database" => "DB NAME",
        "Uid" => "USER",
        "PWD" => "PASSWORD"
    );
    
    // 建立连接并直接输出错误
    $conn = sqlsrv_connect($serverName, $connectionOptions);
    if( $conn === false ) {
        die( print_r( sqlsrv_errors(), true));
    }
    
    // 执行测试查询
    $tsql = "SELECT @@Version as SQL_VERSION";
    $getResults = sqlsrv_query($conn, $tsql);
    if ($getResults == FALSE) {
        die(print_r(sqlsrv_errors(), true));
    }
    
    // 输出查询结果
    while($row = sqlsrv_fetch_array($getResults, SQLSRV_FETCH_ASSOC)) {
        echo $row['SQL_VERSION'];
    }
    
    sqlsrv_free_stmt($getResults);
    sqlsrv_close($conn);
    

4. 检查权限和环境变量

  • 确保运行PHP的用户(比如Apache的www-data)有读取ODBC配置文件的权限,执行:
    sudo chmod 644 /etc/odbcinst.ini /etc/odbc.ini
    
  • 如果遇到动态链接库找不到的错误,可以在Web服务配置里添加环境变量,比如在Apache的/etc/apache2/envvars里添加:
    export LD_LIBRARY_PATH=/opt/mssql-tools/lib64/
    
    添加后重启Apache生效。

按以上步骤操作后,大部分升级后的sqlsrv连接问题都能解决。

内容的提问来源于stack exchange,提问作者Diego de Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:06