2015-02-09 136 views
0

我有一個遠程服務器上運行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

回答

0

我這個問題的具體版本解決了兩個步驟:

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