经常出现的错误“SQLSTATE[IMSSP]:此扩展需要用于 SQL Server 的 Microsoft ODBC 驱动程序才能与 SQL Server 通信。”

问题描述 投票:0回答:0

不幸的是,MSSQL 的 ODBC 驱动程序并不总是适用于我的 PHP 查询。我经常收到错误信息:

SQLSTATE[IMSSP]:此扩展需要用于 SQL Server 的 Microsoft ODBC 驱动程序才能与 SQL Server 通信。转到以下 URL 下载适用于 x64 的 SQL Server 的 ODBC 驱动程序:https://go.microsoft.com/fwlink/?LinkId=1637121

但是当我刷新页面时,它可能会再次工作(或者它可能不会再次工作,我必须再次刷新)。

我搜索错误信息时,只找到应该安装驱动的结果。但是,驱动程序已安装并且也显示在 phpinfo() 中。

phpinfo odbc:

phpinfo odbc

phpinfo PDO:

phpinfo pdo

无论是通过odbc还是sqlsrv建立PDO连接,错误信息都不会永久消失。它出现在装有 PHP 7 的服务器和装有 PHP 8 的服务器上。

补充:错误发生在连接过程中。所以我试着把它放在一个循环中,所以如果第一次连接尝试失败,第二次或第三次可能会成功。但即使 100 次尝试也会失败。要么第一次尝试成功,要么根本不起作用。

while ($count < $maxTries) {
    try {
        $conn = null;
        $conn = new PDO("sqlsrv:server=" . $host . " ; Database = " . $db . "", $user, $pw);
        
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $count = $maxTries;
        echo "Connection SUCCESSFUL";
    } catch (Exception $e) {
        $count2 = 0;
        while($count2 < $maxTries2) {
            try {
                $conn2 = null;
                $conn2 = new PDO("sqlsrv:server=" . $host . " ; Database = " . $db . "", $user, $pw);
                
                $conn2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $count2 = $maxTries2;
                echo "Connection2 SUCCESSFUL";
            } catch (Exception $e1) {
                $count2++;
                echo "$count2 . Connecting to $host: <br>";
                echo "$count2 Connection failed ... <br>";
                #die(print_r($e->getMessage()));
            } 
        }
        $count++;
        echo "$count . Connecting to $host: <br>";
        time_nanosleep(0, 250);
        // handle exception
        if ($count == $maxTries) {
            echo "$count Connection failed ... <br>";
            die(print_r($e->getMessage()));
        }
    }
}

之后 $conn 变量仍然为 null,查询执行失败。

你对我如何永久解决这个问题有什么想法吗?

php sql-server odbc sqlsrv
© www.soinside.com 2019 - 2024. All rights reserved.