提问人:ButcherFromHell 提问时间:10/5/2023 最后编辑:ButcherFromHell 更新时间:10/11/2023 访问量:110
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
问:
我需要使用 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_sqlsrv
sqlsrv
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 - 我已经检查过了,我有文件在路径中ini
php7.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 服务器上的某个地方 - 但不知道出了什么问题。
答:
我终于成功了。
怎么了?
第 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,我终于连接上了!:)
结论:
仔细检查驱动程序的版本,以确保它们可以协同工作。事实证明 - 这非常重要。
评论