PHP 7.2 + sqlsrv + string(237) “SQLSTATE[IMSSP]:此扩展需要 Microsoft ODBC Driver for SQL Server 才能与 SQL Server 通信

PHP 7.2 + sqlsrv + string(237) "SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL Server

提问人:ButcherFromHell 提问时间:10/5/2023 最后编辑:ButcherFromHell 更新时间:10/11/2023 访问量:110

问:

我需要使用 sqlsrv 从 PLESK CentOS 7 上的 PHP 7.2 连接到 SQL Server

据我所知,我有我需要的一切。

1 - 我已安装软件包msodbcsql

2 - 我已经安装了软件包:

unixODBC-devel make gcc-c++ gcc autoconf automake plesk-php7.2-devel libtool-ltdl.x86_64 libtool-ltdl-devel.x86_64

3 - 我添加了模块pdo_sqlsrvsqlsrv

4 - 我重读了PHP处理程序

5 - 我重新读取组件属性以使模块在 GUI 中可见

6 - 我已经检查过:/opt/plesk/php/7.2/bin/php -m | grep sqlsrv

我看到:

pdo_sqlsrv
sqlsrv

7 - 我重新启动了 PHP-FPM 主进程以将更改应用于 FPM 站点

8 - 我已经检查了最新版本的ODBC驱动程序:

软件包 unixODBC-2.3.11-1.rh.x86_64 已安装和最新版本

unixODBC 2.3.11
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini

9 - 我已经检查过了,我有文件在路径中iniphp7.2/opt/plesk/php/7.2/etc/php.d: odbc.ini

但是在尝试从脚本连接时,我仍然看到错误:

string(237) “SQLSTATE[IMSSP]:此扩展需要 Microsoft ODBC Driver for SQL Server 才能与 SQL Server 通信。访问以下 URL 以下载 ODBC Driver for SQL Server for x64:https://go.microsoft.com/fwlink/?LinkId=163712”

我的连接代码:


$params = [
    "UID" => $username,
    "PWD" => $password,
    "Database" => $database,
    "TrustServerCertificate" => true
];
if(sqlsrv_connect($host, $params)) {
    echo "connected..";
} else {
    echo "Connection could not be established. DO not know why..sick!<br />";
    echo "<pre>";
    die( print_r( sqlsrv_errors(), true));
    echo "</pre>";
}

这适用于同一服务器(不同网络空间)上的 PHP8.0。

我错过了什么?

更新 - 更多信息:

为了调试,我已经锁定了对 MS SQL 服务器的远程访问 - 以确保问题出在 Apache/www 端还是 MS SQL。 错误没有改变 - 所以我确定问题出在 Web 服务器上的某个地方 - 但不知道出了什么问题。

php sql-server odbc plesk sqlsrv

评论

2赞 Thom A 10/5/2023
MySQL是如何参与其中的?
0赞 ButcherFromHell 10/5/2023
@ThomA - 你什么意思?
0赞 Olivier 10/5/2023
@ButcherFromHell 您已经放置了 mysql 标签(我删除了它)。
0赞 ButcherFromHell 10/5/2023
@ThomA - 哦,对不起,没有看到 - 它一定是我错过了建议的标签。谢谢。
0赞 ButcherFromHell 10/5/2023
@Olivier - 谢谢。

答:

0赞 ButcherFromHell 10/11/2023 #1

我终于成功了。

怎么了?

第 1 步 - 我已经安装了软件包msodbcsql

我做到了 - 我从这里获取了有关它的信息.

# curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
# yum remove unixODBC-utf16 unixODBC-utf16-devel
# ACCEPT_EULA=Y yum install msodbcsql18

有安装Microsoft ODBC 18(msodbcsql18)和sqlsrv-5.8.1 for PHP 7.2的信息 - 它们不能一起工作。

它是.在我的研究中,我再次来到这里 - 发现 php 驱动程序 5.8.1 不适用于 Microsoft ODBC 18。以前错过了。ver 18 - Microsoft ODBC 18

所以我已经安装了以前的Microsoft ODBC 17

# curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo

# sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
# sudo ACCEPT_EULA=Y yum install -y msodbcsql17

# sudo ACCEPT_EULA=Y yum install -y mssql-tools
# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
# source ~/.bashrc

# sudo yum install -y unixODBC-devel

正如 MS 在这里建议的那样,然后重新启动 apache,我终于连接上了!:)

结论:

仔细检查驱动程序的版本,以确保它们可以协同工作。事实证明 - 这非常重要。