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

8ljdwjyq  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(153)

我需要使用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 -我已经检查过了,在路径/opt/plesk/php/7.2/etc/php.d: odbc.ini中有php7.2ini文件
但仍然尝试从脚本连接时,我看到错误:
string(237)“SQLSTATE[IMSSP]:此扩展需要Microsoft ODBC Driver for SQL Server与SQL Server通信。访问以下URL以下载SQL Server for x64的ODBC驱动程序: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上工作(不同的Web空间)。
我错过了什么?
更新-更多信息:
为了调试,我锁定了对MS SQL服务器的远程访问-以确保问题是在Apache/www端还是MS SQL端。错误没有改变-所以我相信问题是在Web服务器上的某个地方-但不知道什么是错的。

wf82jlnq

wf82jlnq1#

我终于成功了。
怎么了?
步骤1 -我已经安装了msodbcsql软件包
我从here那里得到了信息

# 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(msodbcsql 18)和sqlsrv-5.8.1 for PHP 7.2的信息-这将无法一起工作。
ver 18 - Microsoft ODBC 18。在我的研究中,我又去了这里-并发现**php驱动程序5.8.1将不与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建议的here,然后重新启动Apache,我终于连接上了!:)
结论:
仔细检查驱动程序的版本,以确保它们可以一起工作。事实证明-这是非常重要的。

相关问题