我尝试使用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
支持
答案 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进程可能在本地系统帐户下运行:
由于此帐户是本地,因此它无权访问远程 SQL Server。
您可以将IIS / Apache服务更改为使用授权连接到SQL Server的凭据(您的?)运行,但请注意,这可能会导致服务出现其他权限问题,如果您更改则会出现问题将来你的密码。
尝试从命令行运行测试脚本(默认情况下应使用您的凭据运行)以确定问题所在:
php -r "var_dump(odbc_connect(...));"
答案 3 :(得分:1)
此错误是由于某些原因无法建立与服务器的连接而导致的常规错误。了解您使用PHP的服务器及其使用的应用程序非常重要。示例Apache,Xampp或Wamp等。
以下是您可以尝试的事情。
让我简要介绍一下,下面是参考链接。
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这样的服务器会像
那样记录这个odbcODBC 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。
我希望它能解决你的问题。