Php SQL Server:Windows身份验证在Management Studio中工作,而不是在Apache中

Php SQL Server:Windows身份验证在Management Studio中工作,而不是在Apache中,php,sql-server,Php,Sql Server,我的应用程序(php、codeignitor)正在尝试通过Windows身份验证连接到Sql Server 2016 获取此错误: Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for use

我的应用程序(php、codeignitor)正在尝试通过Windows身份验证连接到Sql Server 2016

获取此错误:

Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'AAA\abcd'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'AAA\abcd'. ) )
将相同的windows帐户凭据传递到SQL Server管理工具时,工作正常

另外,当我尝试使用sql server用户帐户连接到sql server时,它也可以正常工作


我缺少什么?

如果要使用windows身份验证连接到SQL Server,只需将用户名和密码留空即可。如果设置用户名和密码,则将使用SQL身份验证

使用windows身份验证时,Web服务器的进程标识用于连接到服务器。 这就是为什么您可以使用SQLServerManagementStudio(使用windows凭据进行身份验证)连接到服务器,但脚本失败的原因

如果您有用于SQL Server的PHP驱动程序,您可以尝试使用此脚本来查看您的脚本是在哪个帐户下执行的

<?php
$server = 'server\instance,port';
$cinfo = array(
    "Database"=>'master'
);

$conn = sqlsrv_connect($server, $cinfo);
if( $conn === false )
{
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

$sql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false ) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

$row = sqlsrv_fetch_array($stmt);
echo "Login name: ".$row[0];

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>


您的连接字符串是什么?您使用哪个库?我没有设置连接字符串。我使用的是codeignitor,它有数据库配置文件,所以我添加了主机名、用户名、密码和数据库名连接字符串应该是什么?我的意思是我们可以设置连接字符串,然后保留其他数据库配置