为什么我不能使用PHP连接到我的mssql数据库?

时间:2015-04-14 19:33:01

标签: php sql-server sql-server-2012

我已经做了很多研究,试图让我的IIS上的PHP代码连接到我的MSSQL数据库。我似乎无法弄清楚这个问题。有没有人遇到过这个?

<?php

$serverName = 'AEGIS-PC\SQLEXPRESS';
$connectionInfo=array('Database'=>'tttb_db');

$con = sqlsrv_connect($serverName, $connectionInfo);
if($con){
    echo 'Connection established<br />';
}
else {
    echo 'Connection failed<br />';
    die(print_r(sqlsrv_errors(), TRUE));
}

?>

更新,我们遇到了新的错误:

  

连接失败   数组([0] =&gt;数组([0] =&gt; 28000 [SQLSTATE] =&gt; 28000 [1] =&gt; 18456 [代码] =&gt; 18456 [2] =&gt; [Microsoft] [ODBC驱动程序11 for SQL Server] [SQL Server]登录失败,因为用户&#39; NT AUTHORITY \ IUSR&#39;。[message] =&gt; [Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]用户登录失败&#39; NT AUTHORITY \ IUSR&#39;。)[1] =&gt;数组([0] =&gt; 42000 [SQLSTATE] =&gt; 42000 [1] =&gt; 4060 [code] =&gt; 4060 [ 2] =&gt; [Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]无法打开数据库&#34; tttb_db&#34;登录请求。登录失败。[message] =&gt; [Microsoft] [用于SQL Server的ODBC驱动程序11 [SQL Server]无法打开数据库&#34; tttb_db&#34;登录请求。登录失败。)[2] =&gt;数组([0] =&gt; 28000 [SQLSTATE] =&gt; 28000 [1] =&gt; 18456 [code] =&gt; 18456 [2] =&gt; [Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]用户登录失败&nbsp; NT AUTHORITY \ IUSR&#39; [message] =&gt; [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Serv呃]用户“NT AUTHORITY \ IUSR&#39;”登录失败。 )[3] =&gt;数组([0] =&gt; 42000 [SQLSTATE] =&gt; 42000 [1] =&gt; 4060 [code] =&gt; 4060 [2] =&gt; [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server ]无法打开数据库&#34; tttb_db&#34;登录请求。登录失败。[message] =&gt; [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无法打开数据库&#34; tttb_db& #34;登录请求。登录失败。))

我们的SQL服务器使用Windows身份验证,我们的服务器名称为AEGIS-PC\SQLEXPRESS,用户名和密码块显示为灰色。我无法想到我们的登录失败的原因。我们做错了什么?

3 个答案:

答案 0 :(得分:3)

有一些事情可能导致此类问题:

1。)您的模块未加载,因为它的VC9代替VC11。检查系统使用的编译器版本并安装正确的驱动程序。

2.。)检查您的PHP版本并使用正确的PHP版本驱动程序,您可以在phpinfo()中查看。

3.。)不要忘记安装MSSQL Native Client,否则无法连接到数据库,这是我每次都遇到的问题。

您的代码看起来很好,如果您收到错误消息sqlsrv_connect未找到该模块未加载的信号。

https://www.microsoft.com/en-us/download/details.aspx?id=20098

答案 1 :(得分:1)

您需要为“NT AUTHORITY \ IUSR”系统帐户添加服务帐户,以便IIS访问数据库。

这是错误字符串的关键部分:

 [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\IUSR'

当有人点击网站并且php脚本试图访问SQL Server时,它使用IIS的系统帐户,而不是网站帐户上的用户。您可以让IIS对数据库请求使用Windows身份验证。有关使用IIS启用Windows身份验证,请参阅下文 https://technet.microsoft.com/en-us/library/cc754628%28v=ws.10%29.aspx

公平警告,仅当用户点击网页与网络服务器位于同一个AD域时才有效。

如果您完全走这条路线,请注意您为IIS系统帐户分配的权限。

答案 2 :(得分:1)

这只是我发现的一个简单的解决方案。结帐http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for-user-nt-authoritynetwork-service/

只需几步。

  1. 转到SQL Server&gt;&gt;安全&gt;&gt;登录并右键单击NT AUTHORITY \ NETWORK SERVICE并选择Properties
  2. 在新打开的“登录属性”屏幕中,转到“用户映射”选项卡。然后,在“用户映射”选项卡上,选择所需的数据库 - 尤其是显示此错误消息的数据库。在下部屏幕上,检查角色db_owner。单击“确定”。
  3. 这应该可以解决您的问题