2016-05-13 39 views
3

我有以下腳本來連接到我的Microsoft Azure服務器。SQLSTATE [01002] Adaptive Server連接失敗(嚴重性9)

<?php 

try { 
    $hostname = "secrets.database.windows.net"; 
    $dbname = "secrets"; 
    $username = "secrets"; 
    $pw = "secrets"; 
    $dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw"); 
} catch (PDOException $e) { 
    echo "Failed to get DB handle: " . $e->getMessage() . "\n"; 
    exit; 
} 

echo "Passed!"; 

上面的腳本傳遞給我的舊服務器,但從新服務器執行時給我以下錯誤消息。

SQLSTATE[01002] Adaptive Server connection failed (severity 9) 

我的新的服務器的PHP設置如下:

sudo apt-get install -y php5.6-fpm php5.6-ldap php5.6-curl php5.6-cli php5.6-mcrypt php5.6-intl php5.6-json php5.6-pdo-dblib php5.6-mysqlnd php5.6-memcached php5.6-mbstring php5.6-imap php5.6-xml php5.6-sybase 

我檢查迄今:

1)兩者有相同的面向公衆的IP地址。

2)兩者都具有相同的PHP PDO/ODBC設置。

$ php -i | grep PDO 
DO 
PDO support => enabled 
PDO drivers => dblib, mysql, odbc 
PDO Driver for FreeTDS/Sybase DB-lib => enabled 
PDO Driver for MySQL => enabled 
PDO_ODBC 
PDO Driver for ODBC (unixODBC) => enabled 

3)我能夠使用兩個服務器ping通我使用telnet服務器:

telnet secrets.database.windows.net 1433 

任何建議,將不勝感激。

回答

5

經過一些谷歌搜索後,我遇到了這個答案。

Connect PHP to MSSQL via PDO ODBC

原來我只是需要更新我的/etc/freetds/freetds.conf

我的變化:

取消註釋TDS協議版本和更新。

tds version = 8.0 

在以下示例中添加了mssql。

[mssql] 
host = 
Port = 1433 
tds version = 8.0 
+1

我有相同的問題。在你提供的鏈接中的答案肯定得到了幫助。我唯一擔心的是tds版本8.0實際上回退到tds版本7.1,如http://www.freetds.org/userguide/choosingtdsprotocol.htm中所述,但它仍然比我使用7.2時更穩定,這會使我自適應服務器連接 –

+1

考慮到這一點,我還會繼續並將您的答案標記爲正確。如果我親自問過這個問題,你的答案將適用。 –

0

我得到了同樣的問題在這裏,但它是由添加的freetds的8.0版本,直接在PHP代碼連接固定:

<?php 

try { 
    $hostname = "secrets.database.windows.net"; 
    $dbname = "secrets"; 
    $username = "secrets"; 
    $pw = "secrets"; 
    $dbh = new PDO ("dblib:version=8.0;charset=UTF-8;host={$hostname};dbname={$dbname}", $username, $pwd); 
} catch (PDOException $e) { 
    echo "Failed to get DB handle: " . $e->getMessage() . "\n"; 
    exit; 
} 

echo "Passed!"; 
相關問題