2016-09-09 36 views
1

连接到SQL Server的数据与PHP当试图连接到我的MSSQL数据库,我得到的错误 “SQLSTATE [01002] Adaptive Server连接失败(严重性9)”在Ubuntu

下面是PHP代码我“M运行

<?php 

    try { 
    $hostname = "hostname.database.windows.net"; 
    $port = 1433; 
    $dbname = "database-dev"; 
    $username = "dbuser"; 
    $pw = "dbpassword"; 
    $dbh = new PDO  ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw"); 
    } catch (PDOException $e) { 
    echo "Failed to get DB handle: " . $e->getMessage() . "\n"; 
    exit; 
    } 
    $stmt = $dbh->prepare("select name from master..sysdatabases where  name = db_name()"); 
    $stmt->execute(); 
    while ($row = $stmt->fetch()) { 
    print_r($row); 
    } 
    unset($dbh); unset($stmt); 
?> 

而下面是我的ODBC.INI,ODBCINST.INI和freetds.conf,你可以看到我的phpinfo()这里( “http://wingedw.com/matiks/connect.php”)的驱动程序设置为freetds的和PDO和pdo_dlib模块已被添加到PHP 5,为什么即时通讯错误的任何线索,即时确认凭证是正确的。

ODBC.INI

[MSSQLServer] 
Driver = FreeTDS 
Description = Any description 
Trace = No 
Server = servername 
Port = 1433 
Database = dbname 
wTDS_Verison = 7.1 

ODBCINST.INI

[FreeTDS] 
Driver  = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so 
Setup   = /usr/lib/i386-linux-gnu/odbc/libtdsS.so 
UsageCount  = 1 

freetds.conf

[global] 
    # TDS protocol version 
;  tds version = 7.1 

    # Whether to write a TDSDUMP file for diagnostic purposes 
    # (setting this to /tmp is insecure on a multi-user system) 
;  dump file = /tmp/freetds.log 
;  debug flags = 0xffff 

    # Command and connection timeouts 
;  timeout = 100 
;  connect timeout = 100 

    # If you get out-of-memory errors, it may mean that your client 
    # is trying to allocate a huge buffer for a TEXT field. 
    # Try setting 'text size' to a more reasonable limit 
    text size = 64512 

# A typical Sybase server 
[egServer50] 
    host = symachine.domain.com 
    port = 5000 
    tds version = 7.1 

# A typical Microsoft server 
[MSSQLServer] 
    host = servername 
    port = 1433 
    tds version = 7.1 
+0

在你的'odbc.ini'中,你似乎有'wTDS_Verison = 7.1'而不是'TDS_Verison = 7.1'。 – FlipperPA

回答

0

原来一切都配置正确,这个问题是使用DBLIB在ODBC,请代码如下。

try { 
    $hostname = "hostname.database.windows.net"; 
    $port = 1433; 
    $dbName = "databasename"; 
    $dbuser = "[email protected]"; 
    $dbpass = "password"; 
$dbh = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName, 
      $dbuser, $dbpass); 
    //echo "COnnected"; 

    } catch (PDOException $e) { 
    echo "Failed to get DB handle: " . $e->getMessage() . "\n"; 
    exit; 
}