不幸的是,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 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,查询执行失败。
你对我如何永久解决这个问题有什么想法吗?