php连sqlserver2008 r2需要啥版本的ntwdblib.dll

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php连sqlserver2008 r2需要啥版本的ntwdblib.dll相关的知识,希望对你有一定的参考价值。

版本的选择是依据php版本决定的,具体如下:

一、php5.3以下的版本连接sql server
5.3以下的版本扩展里面自带一个php_mssql.dll;接数据库的扩展,可以利用这个扩展链接数据库,(只限于链接低版本数据库)。
具体的步骤如下:
1:首先安装sql server,超级不好安装,我之前安装的是2008版本的,Windows过期后就不能用了,然后重装还装不上,最后重装系统才装上
2:确定SQL装的时候用的是混合认证模式,或SQL验证模式,然后打开php的配置文件(php.ini),开启mssql扩展 (extension=php_pdo_mssql.dll前面的分号去掉)并且需要把mssql.secure_connection = On 重启后生效。
如果比较顺利的话已经可以连接数据库了,如果连不上就需要继续低下的配置:
3: 检查ntwdblib文件的版本(php/下面和Apache/下面)下载正确的版本的 ntwdblib.dll(2000.80.194.0)覆盖现有的DLL文件,(把ntwdblib.dll,php_mssql.dll 复制到system32目录中也可以)ntwdblib.dll 用于PHP连接MSSQL2005或2008的驱动文件。
4:测试连接:mssql_connect(\'localhost,1433\', \'用户名\', \'密码\');
二、php5.3+连接sql server
其 实5.3以下的php版本已经很少用了,况且安全性和兼容性都不好,所以高版本的php还是比较常见的。实践证明低版本的php连接数据库成功率比较低 (2005以上的版本几乎不能使用),推荐使用php5.3+ php使用微软专门的扩展 SQLSRV 来连接sqlserver数据库
步骤如下:
1:先到微软网站下载 SQL Server Driver for PHP 是一个自解压的 EXE文件,解压缩后你会得到这么几个文件:

其中的52、53表示就是php的5.2.x和5.3.x 版本,选择跟你php版本相匹配的;vc6或vc9的选择要看你使用的是什么web服务器软件,如果使用的是IIS那就选择vc9的,如果是Apache 则选择vc6的,ts和nts的选择要看你安装的php版本是线程安全版的还是非线程安全版,ts是线程安全,nts是非线程安全。

参考技术A 您好,ampp好几百m太复杂了,不建议使用。你可以使用phpstudy只有30m,里面已经集成mssql扩展。在菜单扩展管理面勾上php_sqlsrv扩展即可。phpstudy的扩展管理超级方便如图。

本机用php连接远程MSSQL,代码
<?php
$linkId = mssql_connect('IP地址','用户名','密码');
?>
提示
引用
mssql_connect() [function.mssql-connect]: Unable to connect to server

而同事就可以连,他比较了ntwdblib.dll这个文件,版本都是2000.2.8.0。唯一不同的是他的机子装了MSSQL,怀疑是这个原因。
搜索了下,发现确实是这个原因。也有不少人碰到装了MSSQL就可以连远程MSSQL,没装则不行。
试验了下,发现原因还是在于NTWDBLIB.DLL这个文件。我本机是php5自带的,版本为2000.2.8.0,他也是。
在MSSQL光盘中搜索这个文件,找到NTWDBLIB.DLL,版本是2000.80.194.0。
将这个文件,Copy到php安装目录和c:\windows\system32目录下,停掉IIS或Apache。
重启,连接成功:)本回答被提问者和网友采纳

在IIS7中通过PHP连接到SQL SERVER 2008(使用Windows身份验证)?

我需要通过传递用户名和密码来使用PHP代码中的Windows身份验证连接到Sql Server 2008,就像我们使用SQL身份验证连接到Sql Server时那样。我需要根据Windows身份验证的用户/密码对用户进行身份验证。

当我使用SQL身份验证时,我能够通过在数据源(ODBC)配置工具中创建名为DBconnect的系统DSN进行连接。然后,我可以使用SQL Server身份验证成功验证登录ID,并使用具有此php代码的用户输入的登录ID和密码连接到数据库:

$con = odbc_connect("DBconnect", "sql_user", "sql_password");

现在,当SQL Server使用Windows身份验证时,我需要做同样的事情。我想在数据源(ODBC)配置工具中创建一个名为DBConnect_NT的系统DSN,并将其设置为使用网络登录ID通过Windows身份验证验证登录ID的真实性。

我有这个代码:

$con = odbc_connect("DBconnect_NT", "windows_user", "windows_pass");

但它不起作用。我收到此错误:

查询准备/执行出错。 28000

我在IIS7 Manager的Authentication部分中更改了一些设置

Windows Authentication = Enabled
Anonymous Authentication = Disabled

现在我可以使用这段代码:

$con = odbc_connect("DBconnect_NT", "", ""); 

我看到一个弹出窗口提示我登录。当我输入用户名和密码时,它会连接,因此允许我使用相同的$con连接对象进行其他查询。

遗憾的是,我无法根据此方法对网站的用户进行身份验证。当我向弹出窗口输入错误的用户名和密码时,它没有响应(弹出窗口再次出现)。如果我取消弹出窗口,它将显示以下401错误:

401 - 未授权:由于凭据无效,访问被拒绝。

我是否使用正确的方式通过Windows身份验证连接到SQL Server?是否有其他可能的方法通过动态传递Windows身份验证用户名和密码来连接SQL Server?

我也尝试使用LDAP对Active Directory进行身份验证,但它无法正常工作。

我在Amazon EC2机器上使用SQL SERVER 2008,IIS7和PHP5.3。

这是我使用http://example.net/Webservice/connect.php构建的flex应用程序。 Flex动态地将用户名/密码从表单传递给此弹出窗口,从而进行连接。但是当提供错误的用户名/密码时,弹出窗口很难处理。它连续回来,flex应用程序挂起。

如果在弹出窗口中输入错误的用户名/密码时可能会收到错误代码,则可能会解决问题。使用Windows身份验证连接SQL Server并直接传递用户名/密码的其他一些方法也可以解决我的问题。

答案

要对sql server使用Windows身份验证,请不要指定用户名和密码。而是更改集成安全性的连接字符串,如下所示:

Connection string = "Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;"

或可信连接的变体:

Connection string = "Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;"

或者,如果您使用的是ODBC DSN,请以类似的方式跳过用户名和密码。

最重要的是,在这种情况下,您需要了解Windows用户与数据库的连接是运行您站点的IIS帐户。您执行的Windows身份验证将是本地Intranet:您的所有用户都是Windows域的一部分,或者对它有信任。

如果您在此处搜索IIS PHP和SQL服务器,您将获得一些可能有用的信息。

另一答案

使用Windows身份验证时,Sql Server根本看不到您的用户名或密码。停下来再读一遍这句话,因为理解这一点非常重要。

要使Windows身份验证起作用,必须首先直接使用Active Directory域控制器(DC)进行身份验证。成功登录后,DC将为您的会话发出安全令牌。这是您为Sql Server Windows身份验证提供的令牌,而不是您的用户名或密码。 Sql Server仅验证令牌。

这就是LDAP方法不起作用的原因。 LDAP仅从Active Directory提供“是/否”响应。 LDAP不提供您需要的安全令牌。可以把它想象成等同于使用证书认证到Linux服务器的Windows。此外,该令牌与进行连接的进程相关联。它不是您可以在连接对象上设置的属性。这是一种安全功能,可以很难窃取或劫持令牌。

这会在网站中产生问题,您需要一种方法来存储和管理网站的每个用户的令牌,并将其附加到您的Web服务器进程。 IIS为此提供了一种称为Impersonation的机制。它最初是为ASP.Net构建的,但似乎FastCGI确实通过fastcgi.impersonate setting the php.ini file支持它。

您还需要一种方法来连接到公共页面上的数据库预身份​​验证,以及将身份验证连接到Active Directory帐户的方法,这将限制您可用的身份验证机制。我自己不是一个普通的PHP用户,也不知道你的AD环境与你的EC2 Web服务器实例有什么关系,这就是我可以带你去的。

以上是关于php连sqlserver2008 r2需要啥版本的ntwdblib.dll的主要内容,如果未能解决你的问题,请参考以下文章

做开发的朋友们,SqlServer大家都用啥版本

SQL2008和sql2008 r2有啥区别

windows server 2008 r2 这两个版本有啥区别

sql server 2008 r2那些版本有啥区别

windows2008R2 x64位架设IIS7.x的支持SQLServer2008的PHP服务器

Win 10 + IIS + PHP v7.1.7 + SQL Server 2008 R2如何让SQL Server连接正常工作?