PHP 尝试连接 SQL 服务器时无法识别 sqlsrv_connect() 函数
PHP unable to identify sqlsrv_connect() function while trying to connect SQL Server
我正在尝试使用 sqlsrv_connect()
函数从一个简单的 PHP 文件连接到本地 SQL 服务器,但每次我都在浏览器中调用该文件通过本地主机,它抛出一个 500(内部服务器错误)说:
PHP Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:\inetpub\wwwroot\AJAX_Tutorial\get_db_data.php:4
get_db_data.php
是我尝试连接服务器的文件。似乎 PHP 或本地主机无法识别 sqlsrv_connect()
功能。但就我而言,我做了所有必要的事情来确保 PHP 连接到 SQL 服务器。
我的环境:Windows10 Pro,版本 21H2,64 位。
我做了什么:
- 启用 IIS 确保 CGI/Fast CGI 正常工作。
- 在 C:\Program Files\PHP-8.1.1
安装了 PHP 8.1.1 非线程安全 x64 版本
- 在C:\Program Files\PHP-8.1.1中,将php.ini-开发文件重命名为php.ini
- 在 php.ini 文件中,取消注释 extension_dir = "ext" 指令。
- 已下载 php_wincache.dll 并将其添加到 PHP 的默认 ext 目录。
- 在 php.ini 文件的动态扩展部分添加了行扩展=php_wincache.dll。
- 已安装 PHPManagerForIIS_V1.5.0 并相应配置 IIS,以便 PHP 可以通过 IIS 托管。还在这里启用了 php_wincache.dll 扩展。
- 已安装 SQL Server 2019 Developer Edition 以及相应的 Management Studio。
- 在 SQL 服务器中创建了相应的数据库和表,我想从 PHP.
连接到该服务器
- 已确保 SQL 服务器的 Microsoft ODBC 驱动程序 17 安装在我的 PC 中,这是 PHP 所需要的。
- 已确保 Microsoft SQL Server 2012 Native Client 安装在我的 PC 中,这是 PHP 所要求的。
- 已为 SQL Server 5.9 下载 PHP 的 Microsoft 驱动程序并提取其内容。将压缩包中名为php_sqlsrv_80_nts_x64.dll的文件复制粘贴到默认的ext目录PHP.
- 在 php.ini 文件的动态扩展部分添加了行扩展=php_sqlsrv_80_nts_x64.dll。
- 在 IIS 管理器中,通过 PHP 管理器,启用 php_sqlsrv_80_nts_x64.dll 扩展。在 IIS 的根目录下创建了一个 phpinfo.php 文件,运行 成功但没有找到 wincache 和 sqlsrvin。
在上面的步骤之后,我 运行 实际的 PHP 文件试图连接 SQL 服务器,但它抛出一个错误,说它无法识别 sqlsrv_connect() 函数。假设 PHP 正在启动时 php_sqlsrv_80_nts_x64.dll 没有被加载,我 运行 php --ini 在命令提示符下。
此时会抛出以下消息:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_wincache.dll' (tried: ext\php_wincache.dll (The specified module could not be found), ext\php_php_wincache.dll.dll (The specified module could not be found)) in Unknown on line 0
Warning: PHP Startup: sqlsrv: Unable to initialize module
Module compiled with module API=20200930
PHP compiled with module API=20210902
These options need to match
in Unknown on line 0
Configuration File (php.ini) Path:
Loaded Configuration File: C:\Program Files\PHP-8.1.1\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
但是,PHP 似乎 运行 没问题,因为当我使用 jQuery AJAX get() 和 post() 方法时HTML 文件从另一个 PHP 文件中获取数据,我成功了。然后没有抛出异常。
所以现在我缺少什么 php_wincache.dll 和 sqlsrv 似乎在 PHP 启动期间加载,我也无法从 PHP 文件连接 SQL 服务器?由于我是 jQuery AJAX 和 PHP 的新手,我不太了解它们的复杂性,因此在过去四天里一直在解决这个问题。我已经用尽了手中的所有资源,但没有任何效果。请帮忙。因此我无法完成我的任务。
get_db_data.php代码:
<?php
$serverName = "(local)"; // Optionally use port number (1433 by default).
$connectionString = array("Database"=>"TestDB"); // Connection string.
$conn = sqlsrv_connect($serverName, $connectionString); // Connect using Windows Authentication.
if($conn === false) {
echo "Connection could not be established.<br/>";
die(print_r(sqlsrv_errors(), true));
} else {
echo "Connection established successfuly.<br/>";
}
sqlsrv_close($conn); // Close connection resources.
?>
感谢和问候!
我找到了问题的根源,即版本不匹配。当我使用 PHP-8.1 时,我下载了 PHP-8.0 的 SQLSRV。由于此匹配,在服务器 PHP 启动期间未加载驱动程序文件。降级到 PHP-8.0 解决了这个问题。
我正在尝试使用 sqlsrv_connect()
函数从一个简单的 PHP 文件连接到本地 SQL 服务器,但每次我都在浏览器中调用该文件通过本地主机,它抛出一个 500(内部服务器错误)说:
PHP Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:\inetpub\wwwroot\AJAX_Tutorial\get_db_data.php:4
get_db_data.php
是我尝试连接服务器的文件。似乎 PHP 或本地主机无法识别 sqlsrv_connect()
功能。但就我而言,我做了所有必要的事情来确保 PHP 连接到 SQL 服务器。
我的环境:Windows10 Pro,版本 21H2,64 位。
我做了什么:
- 启用 IIS 确保 CGI/Fast CGI 正常工作。
- 在 C:\Program Files\PHP-8.1.1 安装了 PHP 8.1.1 非线程安全 x64 版本
- 在C:\Program Files\PHP-8.1.1中,将php.ini-开发文件重命名为php.ini
- 在 php.ini 文件中,取消注释 extension_dir = "ext" 指令。
- 已下载 php_wincache.dll 并将其添加到 PHP 的默认 ext 目录。
- 在 php.ini 文件的动态扩展部分添加了行扩展=php_wincache.dll。
- 已安装 PHPManagerForIIS_V1.5.0 并相应配置 IIS,以便 PHP 可以通过 IIS 托管。还在这里启用了 php_wincache.dll 扩展。
- 已安装 SQL Server 2019 Developer Edition 以及相应的 Management Studio。
- 在 SQL 服务器中创建了相应的数据库和表,我想从 PHP. 连接到该服务器
- 已确保 SQL 服务器的 Microsoft ODBC 驱动程序 17 安装在我的 PC 中,这是 PHP 所需要的。
- 已确保 Microsoft SQL Server 2012 Native Client 安装在我的 PC 中,这是 PHP 所要求的。
- 已为 SQL Server 5.9 下载 PHP 的 Microsoft 驱动程序并提取其内容。将压缩包中名为php_sqlsrv_80_nts_x64.dll的文件复制粘贴到默认的ext目录PHP.
- 在 php.ini 文件的动态扩展部分添加了行扩展=php_sqlsrv_80_nts_x64.dll。
- 在 IIS 管理器中,通过 PHP 管理器,启用 php_sqlsrv_80_nts_x64.dll 扩展。在 IIS 的根目录下创建了一个 phpinfo.php 文件,运行 成功但没有找到 wincache 和 sqlsrvin。
在上面的步骤之后,我 运行 实际的 PHP 文件试图连接 SQL 服务器,但它抛出一个错误,说它无法识别 sqlsrv_connect() 函数。假设 PHP 正在启动时 php_sqlsrv_80_nts_x64.dll 没有被加载,我 运行 php --ini 在命令提示符下。
此时会抛出以下消息:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_wincache.dll' (tried: ext\php_wincache.dll (The specified module could not be found), ext\php_php_wincache.dll.dll (The specified module could not be found)) in Unknown on line 0
Warning: PHP Startup: sqlsrv: Unable to initialize module
Module compiled with module API=20200930
PHP compiled with module API=20210902
These options need to match
in Unknown on line 0Configuration File (php.ini) Path:
Loaded Configuration File: C:\Program Files\PHP-8.1.1\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
但是,PHP 似乎 运行 没问题,因为当我使用 jQuery AJAX get() 和 post() 方法时HTML 文件从另一个 PHP 文件中获取数据,我成功了。然后没有抛出异常。
所以现在我缺少什么 php_wincache.dll 和 sqlsrv 似乎在 PHP 启动期间加载,我也无法从 PHP 文件连接 SQL 服务器?由于我是 jQuery AJAX 和 PHP 的新手,我不太了解它们的复杂性,因此在过去四天里一直在解决这个问题。我已经用尽了手中的所有资源,但没有任何效果。请帮忙。因此我无法完成我的任务。
get_db_data.php代码:
<?php
$serverName = "(local)"; // Optionally use port number (1433 by default).
$connectionString = array("Database"=>"TestDB"); // Connection string.
$conn = sqlsrv_connect($serverName, $connectionString); // Connect using Windows Authentication.
if($conn === false) {
echo "Connection could not be established.<br/>";
die(print_r(sqlsrv_errors(), true));
} else {
echo "Connection established successfuly.<br/>";
}
sqlsrv_close($conn); // Close connection resources.
?>
感谢和问候!
我找到了问题的根源,即版本不匹配。当我使用 PHP-8.1 时,我下载了 PHP-8.0 的 SQLSRV。由于此匹配,在服务器 PHP 启动期间未加载驱动程序文件。降级到 PHP-8.0 解决了这个问题。