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

时间:2015-02-09 10:59:07

标签: php sql-server odbc

我有一台运行IIS7和SQL Server 2008的远程服务器,我试图通过ODBC脚本连接到PHP脚本:

$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

此外:

  • 我在Sql Server配置管理器下启用了TCP / IP,“SQL Server网络配置” - &gt; “MSSQL Server的协议”
  • 我的本地环境是使用PHP 5.4.27
  • 运行XAMPP的Windows 7
  • 端口1433已在我的本地防火墙中打开

我一直在玩sqlsrv连接,但我似乎越来越接近ODBC了。服务器上还有其他需要为ODBC连接设置的还是我的连接方法有问题吗?


编辑:根据Daan的评论,我尝试将连接方法切换到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配置管理器中启用了命名管道并重新启动了服务,但无济于事。

2 个答案:

答案 0 :(得分:0)

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

  1. 必须在hosts文件中创建一个条目。我对此有点模糊,因为它是由我的虚拟主机上的支持技术人员执行的,他们的反应很清楚细节。此时我开始在我的脚本中收到不同的错误消息,这使我在#2之后取得了成功:
  2. 我必须给予关联用户db_owner角色,like sothis post让我走上正轨)。
  3. 现在我可以使用我最初发布的代码远程对数据库运行查询,并添加指定端口:

    $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);
    

答案 1 :(得分:0)

对我来说,手动添加端口后可以正常工作!它后面必须带有逗号。

$server = "server_ip" . ",1433";