PHP connection to MS SQL Server 2008 R2


PHP connection to MS SQL Server 2008 R2

我正在实现一个PHP应用程序,需要能够连接到MS SQL Server 2012和2008 R2。

连接到2012在这个配置下工作正常

  • Windows 7 64位
  • IIS 7.5
  • PHP 5.5.13
  • sql srv native client 11.0
  • php_pdo_sqlsrv_55_nts.dll
  • php_sqlsrv_55_nts.dll

连接到2008 R2不能使用这个配置:

  • Windows 7 64位
  • IIS 7.5
  • PHP 5.4.10
  • sql srv原生客户端10.5
  • php_pdo_sqlsrv_54_nts.dll
  • php_sqlsrv_54_nts.dll

我得到一个错误消息说:"这个扩展需要Microsoft SQL Server 2012本机客户端ODBC驱动程序与SQL Server通信。"

这是我用来连接的代码

class my_mssql{
protected $dsn;
protected $dbh;
protected $server;
protected $user;
protected $password;
protected $colnames;
public $error;
public $resultset;    
function __construct($db, $user, $password, $server='localhost'){
    $this->dsn = 'sqlsrv:Server='.$server.';Database='.$db;
    $this->server = $server;
    $this->user = $user;
    $this->password = $password;
    try {
        $this->dbh = new PDO($this->dsn, $user, $password);
    } catch (PDOException $e) {
        $this->error = $e->getMessage();
    }
}
}

php_pdo_sqlsrv_54_nts.dll似乎只支持连接到2012。我说的对吗?另一方面,在MS下载页面上,他们说PHP驱动v3.0(包含php_pdo_sqlsrv_54_nts.dll)也应该支持2008 R2。

我可以从PHP 5.4连接到2008 R2吗?我是否应该以不同的方式实现2008 R2连接?

我不使用与您相同的驱动程序,我使用Mssql代替。

我有一个Windows Server 2008 R2 64 bit,这是我的工作连接服务器:

$this->dsn = 'mssql:host='.$server.';dbname='.$db;
$this->server = $server;
$this->user = $user;
$this->password = $password;
try {
    $this->dbh = new PDO($this->dsn ,$user, $password);
} catch (PDOException $e) {
    $this->error = $e->getMessage();
}

我真的不知道有什么不同,有这么多的方式和驱动程序连接你知道的。

好的,事实证明,MS SQL Server 2012功能包(包含2012原生客户端)下载页面上的信息在某种程度上是误导的。

他们说"Microsoft®SQL Server®2012功能包是为Microsoft®SQL Server®2012提供附加价值的独立软件包的集合。"

这似乎暗示这些工具仅适用于MS SQL Server 2012,但事实并非如此。

2012原生客户端必须用于连接到MS SQL 2008 R2,如果你正在使用PHP>= 5.4

所以这是包含正确信息的页面:http://technet.microsoft.com/en-us/library/cc296170 (v = sql.105) . aspx

总之

  • PHP & lt;5.4使用2.0驱动程序(原生客户端2008)
  • PHP>= 5.4使用3.0驱动程序(本地客户端2012)

对于MSSQL Server 2008 R2和2012的连接都有效

免责声明:我还没有测试过php <5.4连接SQL Server 2012