使用PHP,ODBC和Windows身份验证连接到SQL Server

时间:2015-08-17 21:29:45

标签: sql-server sql-server-2008 php windows odbc

我尝试使用PHP通过Windows身份验证连接到ODBC数据源。我可以很好地连接到SQL Server中的服务器,所以我知道它正在运行。当我尝试运行命令

$link = odbc_connect("my_odbc","",""); 

我收到错误:

  

"警告:odbc_connect():SQL错误:
[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]
用户登录失败'&#39 ;,C状态28000在SQLConnect中的C:\ Users ..."

我试过了:

$link = odbc_connect("Driver={ODBC Driver 11 for SQL Server};   
        Server='my_odbc';Integrated Security=SSPI","","");

返回了消息:

  

警告:odbc_connect():SQL错误:
[Microsoft] [SQL Server的ODBC驱动程序11]
命名管道提供程序:无法打开与SQL Server的连接[53]。 ,SQL状态08001在SQLConnect中的C:\ Users ..."

不确定我做错了什么。

  • my_odbc是另一台计算机上的SQL Server(2008)。我没有该数据库的管理员权限,因此我无法在此方面进行任何更改(例如启用SQL Server身份验证)。

  • 我正在运行Windows 7并使用PHP 5.6.12

  • phpinfo()表示已启用ODBC支持以及pdo_sqlsrv支持

6 个答案:

答案 0 :(得分:3)

也许你应该使用SQLsrv插件尝试PDO(性能差异不是那么大)(这是我用来连接到我使用SQL Server 2008数据库的其他boss软件):

$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

您可以在此处下载插件

https://www.microsoft.com/en-ca/download/details.aspx?id=36434

在Xampp中,您必须复制该文件夹中的dll:

C:\xampp\php\ext

您必须将该行添加到您的php.ini

extension = php_pdo_sqlsrv_56_ts.dll

注意:不要忘记重新启动服务器,以便它可以考虑新的php.ini文件。

让我知道它是否适合你

答案 1 :(得分:2)

有人收到了相同的错误消息并被问及并回答了他自己的问题here

引用......

我很抱歉这些麻烦。

问题是,我使用SQL Server Native Client 11.0作为驱动程序。我将其切换到SQL Server,现在它可以工作:/

希望这至少可以帮助某人,遇到类似的问题......

答案 2 :(得分:2)

您的问题中的一个重要遗漏是您如何运行PHP以及使用哪些凭据。

假设您使用的是IIS或Apache(或其他Web服务器),那么您的PHP进程可能在本地系统帐户下运行:

IIS service properties Apache service properties

由于此帐户是本地,因此它无权访问远程 SQL Server。

您可以将IIS / Apache服务更改为使用授权连接到SQL Server的凭据(您的?)运行,但请注意,这可能会导致服务出现其他权限问题,如果您更改则会出现问题将来你的密码。

尝试从命令行运行测试脚本(默认情况下应使用您的凭据运行)以确定问题所在:

php -r "var_dump(odbc_connect(...));"

答案 3 :(得分:1)

此错误是由于某些原因无法建立与服务器的连接而导致的常规错误。了解您使用PHP的服务器及其使用的应用程序非常重要。示例Apache,Xampp或Wamp等。

以下是您可以尝试的事情。

让我简要介绍一下,下面是参考链接。

  • 检查是否点击
  • 如果未启用,则启用TCP / IP连接SQL Server配置。为此,请打开SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled)。 重新启动SQL服务。
  • 从服务器启用远程连接
  • 打开端口,执行此操作Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL并保存。
  • 启用运行浏览器服务。SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser设置为运行。
  • 在连接字符串中定义端口
  • 如果正在使用多个实例,则使用计算机名称添加实例名称

样品

$user = 'username';
$pass = 'password';
//Use the machine name and instance if multiple instances are used
$server = 'serverName\instanceName';
//Define Port
$port='Port=1433';
$database = 'database';

$connection_string = "DRIVER={ODBC Driver 11 for SQL Server};SERVER=$server;$port;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);

这里是我发现的有关问题的有用链接

resolving could not open a connection to sql server-errors

sql server provider named pipes provider error

也看看这些链接

Named Pipes Provider: Could not open a connection to SQL Server [53]

答案 4 :(得分:0)

查看注册表HKLM / SOFTWARE / ODBC

你的文件夹名称是什么?

如果有“SQL Server Native Client 11.0”,那么你必须编写像

这样的php代码
odbc_connect("Driver={SQL Server Native Client 11.0};Server=ip;Database=db;", "user", "pass");

然而,像服务器2008这样的服务器会像

那样记录这个odbc
ODBC Driver 11 for SQL Server

然后,您必须用SQL Server的ODBC驱动程序11替换SQL Server Native Client 11.0。

答案 5 :(得分:-1)

在IIS上启用PHP o PDO_ODBC:

我已通过Windows验证以下PHP语句:

$ Conn = new PDO(“odbc:Driver = {SQL Server}; Server = JAMILI-PC \ SQLEXPRESS; null; null”);

我使用的是Windows 2008。

我希望它能解决你的问题。