SQLSRV 驱动程序与带有 MS SQL Server 的 PHP 的 PDO 驱动程序
Posted
技术标签:
【中文标题】SQLSRV 驱动程序与带有 MS SQL Server 的 PHP 的 PDO 驱动程序【英文标题】:SQLSRV driver vs. PDO driver for PHP with MS SQL Server 【发布时间】:2012-07-21 19:22:21 【问题描述】:在选择 SQLSRV 驱动程序和 PDO 驱动程序(对于带有 MS SQL 服务器的 php)时,我应该考虑哪些注意事项?
我看到了之前的 *** 帖子 (When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?),但答案似乎有点缺乏,并且没有提到使用 SQLSRV 驱动程序的所有好处,如this article 中提到的那样。
我正在寻找一个全面的和最新的(例如,SQLSRV 驱动程序仍然只适用于 Windows 的情况吗?)程序员可以将其作为资源引用的答案。
【问题讨论】:
【参考方案1】:Microsoft 终于投入了一些资源来定制他们的原生驱动程序以与 PHP 一起工作。我目前正在对 Apache 2.4 64 位进行 beta 测试。
Beta PHP 7 SQL_SRV 64Bit Driver
【讨论】:
【参考方案2】:SQLSRV 和 PDO_SQLSRV 是两个 current-generation php drivers available from Microsoft,但两者都使用相同的代码: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
,因为我懒得处理日期类。)
我也更喜欢语法,但这只是我自己。
【讨论】:
【参考方案3】:PDO 允许您编写代码以合理地与 DB 无关。
如果你想要真正的 DB 中立,你会想要使用像 NotORM 这样的完整的 DB 抽象层——对于普通的 PDO,你仍然需要小心 SQL 语法差异,但至少你的基本PHP 代码将是 DB 中立的。
现在,与 DB 无关似乎并不重要——如果您使用的是 SQL Server,那么您可能已经被告知这是必需的,仅此而已——但您无法预测在未来,所以如果在 DB 中性驱动程序和 DB 特定驱动程序之间进行选择,并且您没有任何其他偏好的理由,那么选择中性驱动程序....它会让生活变得很多如果您的公司被接管并且新老板想使用 Oracle 作为数据库,那么会更容易!
另外,由于它是 DB 中立的,因此 PDO 在 PHP 社区中更加标准和知名。与使用 MSSQL 驱动程序相比,您将从在线站点(例如这个站点)获得更多关于 PDO 的帮助。
【讨论】:
以上是关于SQLSRV 驱动程序与带有 MS SQL Server 的 PHP 的 PDO 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 sqlsrv 从 CodeIgniter 连接 SQL 数据库