如何在PHP中通过ODBC连接到Server 2008?

问题描述:

我有一个远程服务器上运行IIS7和SQL Server 2008这我想通过ODBC连接到一个PHP脚本:如何在PHP中通过ODBC连接到Server 2008?

$server = "server_ip"; 
$database = 'db'; 
$user = 'user'; 
$password = 'pass'; 

$conn=odbc_connect("Driver={SQL Server};Server=$server;Database=$database;", $user, $password); 

if($conn) { 
    echo "Connection established.<br />"; 
}else{ 
    echo "Connection could not be established.<br />"; 
    die(print_r(odbc_error(), true)); 
} 

但是当它运行时,我得到:

Warning: odbc_connect(): SQL error: [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied., SQL state 08001 in SQLConnect in X:\server\htdocs\alert-interim\test.php on line 10 
Connection could not be established. 
08001 

另外:

  • 我已经TCP下SQL Server配置管理器中启用/ IP, “SQL Server网络配置” - > “为MSSQL服务器协议”
  • 我的本地环境是Windows 7上运行XAMPP与PHP 27年5月4日
  • 端口1433已经在我的本地防火墙被打开

我一直在SQLSRV连接玩弄太多,但我似乎越来越近与ODBC。服务器上是否还有其他需要为ODBC连接设置的连接方法,或者连接方法是否有问题?


编辑:按照大安的评论,我尝试了切换连接方法PDO(但使用SQLSRV而是因为我在Windows上):

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08001]: [Microsoft][SQL Server Native Client 11.0]Named Pipes Provider: Could not open a connection to SQL Server [53]. ' in X:\server\htdocs\alert-interim\test.php:9 Stack trace: #0 X:\server\htdocs\alert-interim\test.php(9): PDO->__construct('sqlsrv:Server=7...', 'user', 'pass') #1 {main} thrown in X:\server\htdocs\alert-interim\test.php on line 9 

我也打开命名Sql Server配置管理器中的管道并重新启动服务,但无济于事。

+0

尝试PDO'新PDO(“DBLIB:主机= yourhost; DBNAME =“。$ db,$ user,$ pass);' – Daan 2015-02-09 11:01:06

+0

谢谢@Daan,我根据您的反馈更新了这个问题。 – praniclift 2015-02-09 11:19:30

我这个问题的具体版本解决了两个步骤:

  1. 的条目曾在hosts文件被创建。我对此有点模糊,因为它是由我的虚拟主机中的技术支持人员执行的,他们的反应很轻。在这一点上,我开始接收我的剧本不同的错误信息而导致我的成功#2后:
  2. 我不得不放弃连接的用户db_owner角色,like sothis post让我在正确的轨道上)。

现在我可以远程对DB使用我最初发布的代码运行的查询,添加指定的端口:

$virtual_dsn = 'DRIVER={SQL Server};SERVER=12.34.56.78,1433;DATABASE=db'; 
$connection = odbc_connect($virtual_dsn,'user','pass') or die('ODBC Error:: '.odbc_error().' :: '.odbc_errormsg().' :: '.$virtual_dsn);