带有MS SQL Server的PHP的SQLSRV驱动程序与PDO驱动程序

时间:2012-07-23 14:27:38

标签: php sql-server pdo driver

在SQLSRV驱动程序与PDO驱动程序之间进行选择时,我应该考虑哪些因素(对于带有MS SQL服务器的PHP)?

我看到了之前的Stackoverflow帖子(When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?),但答案似乎有点缺乏,并没有提到使用this article中提到的SQLSRV驱动程序的所有好处。

我正在寻找一个全面的和最新的(例如,SQLSRV驱动程序仅适用于Windows吗?)这是程序员可以称之为资源的答案。

3 个答案:

答案 0 :(得分:14)

SQLSRV和PDO_SQLSRV是两个current-generation php drivers available from Microsoft,但两者都使用相同的代码:SQL Server Native Client 11.(这就是为什么没有Mac或Linux版本的php驱动程序:它们只是包装器。)性能两个司机应该是相似的;这只是您喜欢的API的问题。

在大多数情况下,由于跨平台的考虑,人们会使用PDO_SQLSRV驱动程序。但是,在查看新(小)项目的两个驱动程序后,我使用了SQLSRV驱动程序,因为它将数据作为基础SQL Server数据类型的[映射]返回,而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,因为我懒得处理日期类。)

我也喜欢语法好一点,但那只是我。

答案 1 :(得分:10)

PDO允许您将代码编写为合理的数据库中立。

如果你想要真正的数据库中立,你想要使用完整的数据库抽象层,如NotORM - 使用普通的PDO,你仍然需要注意SQL语法差异,但至少您的基本PHP代码将与数据库无关。

现在,数据库中立可能看起来并不重要 - 如果您使用的是SQL Server,那么您可能已经被告知这是必需的而不是其他任何东西 - 但您无法预测事情会如何变化未来,所以如果选择在DB中立驱动程序和特定于DB的驱动程序之间,并且您没有任何其他原因需要优先选择,那么请选择中性驱动程序....它会让生活变得很多如果你的公司被接管并且新老板想要使用Oracle作为数据库,那就更容易了!

此外,由于它是数据库中立的,因此PDO在PHP社区中更为标准且更为人所知。你可以从在线网站(比如这个网站)获得更多的PDO帮助,而不是MSSQL驱动程序。

答案 2 :(得分:4)

Microsoft最终提供了一些资源来定制他们的本机驱动程序以便与PHP一起使用。我目前正在测试Apache 2.4 64 Bit。

Beta PHP 7 SQL_SRV 64Bit Driver