SQLSRV 和 PDO_SQLSRV 是Microsoft 提供的两个当前一代 php 驱动程序,但两者都使用相同的代码:SQL Server Native Client 11。(这就是为什么没有 Mac 或 Linux 版本的 php 驱动程序:它们只是包装器。)两个驱动程序应该相似;这只是您喜欢哪个 API 的问题。
在大多数情况下,出于跨平台的考虑,人们会使用 PDO_SQLSRV 驱动程序。但是,在查看了一个新(小型)项目的两个驱动程序之后,我选择了 SQLSRV 驱动程序,因为它将数据作为基础 SQL Server 数据类型的 [a map] 返回,而 PDO_SQLSRV 将所有内容作为字符串返回。
所以如果你的sql是:
SELECT 1234 as integer, Cast(123.456 as float) as float,
getdate() as date, '1234' as string1,'123.456' as string2;
然后来自 PDO_SQLSRV 的行的 var_dump 给出:
array(1) {
[0] =>
array(5) {
'integer' =>
string(4) "1234"
'float' =>
string(7) "123.456"
'date' =>
string(23) "2012-12-06 22:35:05.373"
'string1' =>
string(4) "1234"
'string2' =>
string(7) "123.456"
}
}
而 SQLSRV 驱动程序给出:
array(1) {
[0] =>
array(5) {
'integer' =>
int(1234)
'float' =>
double(123.456)
'date' =>
class DateTime#1 (3) {
...
}
'string1' =>
string(4) "1234"
'string2' =>
string(7) "123.456"
}
}
无论我是否愿意,PDO_SQLSRV 都将我的所有数据转换为一个字符串,这让我发疯了,所以我使用了 SQLSRV。(我不得不承认我设置ReturnDatesAsStrings=true
是因为我懒得处理日期类。)
我也更喜欢语法,但这只是我。