致命错误:未捕获错误:从 Apache 连接到 SQL Server 时调用未定义的函数 mssql_connect()

Fatal error: Uncaught Error: Call to undefined function mssql_connect() when connecting from Apache to SQL Server

提问人:Rudi 提问时间:11/16/2023 最后编辑:Rudi 更新时间:11/17/2023 访问量:95

问:

我使用的是 Apache 服务器版本 2.4 和 PHP 版本 8.2。我想连接到 SQL Server,但收到以下错误:

致命错误:未捕获的错误:调用未定义的函数 mssql_connect() 在 D:\Apache24\htdocs\mcd\configsql.php:6 堆栈中 跟踪: #0 {main} 抛出 D:\Apache24\htdocs\mcd\configsql.php 上 6号线

我已将其添加到:extensionD:\Apache24\php\php.ini

extension=php_sqlsrv_82_ts_x64.dll
extension=php_pdo_sqlsrv_82_ts_x64.dll

该扩展也已正确安装,并显示在 中,如以下屏幕截图所示: https://prnt.sc/9UI5tQM6gFGlphpinfo()

我也使用过这样的功能:sqlsrv_connect()

<?php
$myServer = "pcserver";
$myUser = "username";
$myPass = "password";
$myDB = "dbus";
$dbhandle = sqlsrv_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer");
$selected = sqlsrv_select_db($myDB, $dbhandle) or die("Couldn't open database $myDB");

但是出现以下错误:

致命错误:未捕获的 ArgumentCountError:sqlsrv_connect() 预期为 最多 2 个参数,其中 3 个在 D:\Apache24\htdocs\mcd\configsql.php:6 中给出 堆栈跟踪: #0 D:\Apache24\htdocs\mcd\configsql.php(6): sqlsrv_connect('pcserver', 'username', 'password') #1 {main} 扔进去 D:\Apache24\htdocs\mcd\configsql.php 上行 6

我尝试按照此链接上的文档进行操作:https://www.php.net/manual/en/function.sqlsrv-connect.phpsqlsrv_connect

我尝试使用带有 Windows 身份验证的连接,直到用户名和密码如下所示:

<?php
$serverName = "192.168.0.1"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
?>

代码未获得结果,但收到以下错误:https://prnt.sc/QkQguS-xVVA9

php sql-server apache sqlsrv

评论

0赞 Rudi 11/16/2023
我尝试删除该函数,但它仍然出现错误。我想将此代码更新到最新版本。@Zhorovsqlsrv_select_db()
0赞 AlwaysLearning 11/16/2023
您是否尝试过阅读 sqlsrv_connect 文档以了解如何使用它?
0赞 Rudi 11/16/2023
我已经尝试过并 prnt.sc/QkQguS-xVVA9@AlwaysLearning出现此错误

答:

1赞 Zhorov 11/16/2023 #1

这些函数 和 是旧的和不受支持的 PHP 扩展的一部分。如果要使用 PHP Driver for SQL Server 连接到 SQL Server 实例,则需要使用 ,这将替换这两个函数。PHP Driver for SQL Server 中没有函数,并且不能更改函数名称中的前缀。mssql_connect()mssql_select_db()mssqlsqlsrv_connect()sqlsrv_select_db()mssqlsqlsrv

需要两个参数 - (指定要建立连接的服务器名称的字符串)和(包含连接属性的关联数组)。正在使用的数据库通常是第一个连接选项。如果要使用 SQL 身份验证进行连接,请将 SQL Server 登录名的用户名和密码作为其他连接选项,并确保当前 SQL Server 实例同时使用 SQL 和 Windows 身份验证:sqlsrv_connect()$serverName$connectionInfo

<?php

// Connect to SQL Server instance using SQL authentication
$myServer = "pcserver";
$myUser   = "username";
$myPass   = "password";
$myDB     = "dbus";
$options  = array(
    "Database" => $myDB,
    "UID"      => $myUser,
    "PWD"      => $myPass
);
$dbhandle = sqlsrv_connect($myServer, $options) or die ("Couldn't connect to SQL Server");

// Connect to SQL Server instance using Windows authentication
$myServer = "pcserver";
$myUser   = "username";
$myPass   = "password";
$myDB     = "dbus";
$options  = array(
    "Database" => $myDB
);
$dbhandle = sqlsrv_connect($myServer, $options) or die ("Couldn't connect to SQL Server");

?>

评论

0赞 Rudi 11/17/2023
我已经试过了,prnt.sc/QkQguS-xVVA9@Zhorov出现此错误
0赞 Rudi 11/17/2023
是的,我已经启用了它 prnt.sc/byi6AMenCIf2@Zhorov
0赞 Zhorov 11/17/2023
@Rudi,这不是 SQL 登录名。SQL 登录名是 。如果提供用户名和密码作为呼叫的连接选项,则使用的是 SQL 身份验证。在这种情况下,请使用用户名和正确的密码。sasqlsrv_connect()sa
0赞 Rudi 11/17/2023
它与管理员有何不同?我使用 Windows 身份验证登录到 SSMS。我尝试使用用户名和密码,但仍然不起作用。@Zhorovsa
0赞 Zhorov 11/17/2023
@Rudi,将 SSMS 与 Windows 身份验证配合使用时,使用的是当前的 Windows(或域)帐户。使用 PHP 和 Web 浏览器连接到 SQL Server 时,使用的是 Web 服务器帐户,而不是当前的 Windows 帐户。如果要使用 Windows 身份验证连接到 SQL Server 实例,只需从连接选项中删除用户名和密码即可。并且,请检查是否启用了登录并使用正确的密码。sa
0赞 Rudi 11/20/2023
我的服务器不使用域。我尝试使用Windows身份验证,但它仍然给出相同的错误。这是我的 sa 帐户 prnt.sc/7FMFpHbEwoP6@Zhorov的状态
0赞 Rudi 11/20/2023
我确定我使用的是正确的凭据。事实上,我已经在记事本中重写了我的密码并将其移至密码 prnt.sc/webt-fEjLBp5。是的,我使用SQL身份验证,如我在上面的问题中所示,并且我遵循PHP文档,在运行这样的错误后 prnt.sc/HQyaawaNh5x0@Zhorovsasqlsrv_connect