【问题标题】:Why can't I connect to my mssql database using PHP?为什么我无法使用 PHP 连接到我的 mssql 数据库?
【发布时间】:2015-06-20 13:38:23
【问题描述】:

我做了很多研究,试图让我的 PHP 代码托管在 IIS 上以连接到我的 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));
}

?>

更新,我们有一个新错误:

连接失败 Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][ SQL Server]用户“NT AUTHORITY\IUSR”登录失败。[消息] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]用户“NT AUTHORITY\IUSR”登录失败。)[1] = > Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无法打开数据库登录请求的“tttb_db”。登录失败。[消息] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无法打开登录请求的数据库“tttb_db”。登录失败。)[2 ] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]登录用户“NT AUTHORITY\IUSR”失败。[消息] => [Microsoft][SQL Server 的 ODBC 驱动程序 11][SQL Server]用户“NT AUTHORITY\IUSR”登录失败。)[3] => 数组([ 0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无法打开登录请求的数据库“tttb_db”。登录失败。 [消息] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无法打开登录请求的数据库“tttb_db”。登录失败。 ))

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

【问题讨论】:

  • 你能证明你的 IIS 服务器运行的代码是 PHP 吗?尝试创建一个只有 &lt;?php phpinfo(); ?&gt; 的页面,并确保正在显示信息屏幕。
  • 你的代码是否开启了错误报告?
  • 您是否检查过 PHP 正在您的计算机上运行,​​并且您有必要的 PHP 扩展来连接到 SQL Server?你运行的是什么版本的PHP?在您的代码中添加phpinfo(); 以查看扩展。
  • 我已经安装了 PHP。我可以在屏幕上显示简单的变量,所以我知道 IIS 正在运行 PHP。该脚本在到达数据库部分时似乎中断了。
  • 您的第二个示例没有返回die() 语句?

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


【解决方案1】:

有几件事可能会导致此类问题:

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

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

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

您的代码看起来不错,如果您收到 sqlsrv_connect 未找到的错误消息,则表明该模块未加载。

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

【讨论】:

  • 我们已经加载了我们的模块!现在我们有一个新错误
  • 更新了原来的问题
【解决方案2】:

您需要为“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 对 DB 请求使用 Windows 身份验证。有关使用 IIS 启用 Windows 身份验证的信息,请参见下文: https://technet.microsoft.com/en-us/library/cc754628%28v=ws.10%29.aspx

公平警告,仅当访问网页的用户与网络服务器位于同一 AD 域中时才有效。

如果您真的走这条路,请注意您分配给 IIS 系统帐户的权限。

【讨论】:

    【解决方案3】:

    这只是我找到的一个简单的解决方案。结帐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 >> 安全 >> 登录并右键单击 NT AUTHORITY\NETWORK SERVICE 并选择属性
    2. 在新打开的登录属性屏幕中,转到“用户映射”选项卡。然后,在“用户映射”选项卡上,选择所需的数据库——尤其是显示此错误消息的数据库。在下方屏幕上,检查角色 db_owner。点击确定。

    这应该可以解决您的问题

    【讨论】:

      【解决方案4】:

      1- 转到 SQL Server >> 安全 >> 登录并右键单击 NT AUTHORITY\NETWORK SERVICE 并选择属性 2- 在新打开的登录属性屏幕中,转到“用户映射”选项卡。然后,在“用户映射”选项卡上,选择所需的数据库——尤其是显示此错误消息的数据库。在下方屏幕上,检查角色 db_owner。点击确定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多