我正在实现一个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