web-dev-qa-db-ja.com

SQLSRVドライバーとPDOドライバーの比較PHP with MS SQL Server

SQLSRVドライバーとPDOドライバーのどちらを選択する場合(MS SQLサーバーではPHP))、どのような考慮事項を考慮する必要がありますか?

私はこの以前のStackoverflowの投稿を見ました( WindowsでPHPを使用する場合、(1)SQL Serverのネイティブドライバーまたは(2)PDOドライバーのどちらが良いですか? )しかし、答えは少し欠けているようで、 この記事 で述べたようにSQLSRVドライバーを使用することのすべての利点については言及していません。

プログラマーがリソースとして参照できる、包括的で最新の(たとえば、SQLSRVドライバーがWindowsでのみ使用できる場合はまだあるのでしょうか)という回答を探しています。

17
nmc

PDOを使用すると、DBに中立になるようにコードを記述できます。

真にDBに依存しない場合は、 NotORM -のような完全なDB抽象化レイヤーをプレーンなPDOで使用する必要がありますが、SQL構文の違いに注意する必要がありますが、少なくとも基本的なPHPコードはDBニュートラルになります。

DBニュートラルであることは今は重要ではないように思われるかもしれません-SQLServerを使用している場合は、おそらくそれが必要であり、他には何もないと言われています-しかし、将来どのように変化するかを予測することはできません。 DBニュートラルドライバとDB固有のドライバのどちらかを選択し、他に優先する理由がない場合は、ニュートラルドライバを使用してください。会社が買収され、新しい上司はOracleをDBとして使用したいと考えています。

また、DBニュートラルであるため、PDOはより標準的であり、PHPコミュニティでよく知られています。オンラインサイト(このサイトなど)からのPDOの方が、より多くのヘルプを得ることができます。 MSSQLドライバー。

11
SDC

SQLSRVとPDO_SQLSRVは2つです Microsoftから入手可能な現世代のphpドライバー ですが、どちらも同じコードを使用しています:SQL Server Native Client11(そのため、phpドライバーのMacまたはLinuxバージョンはありません:これらは単なるラッパーです。)2つのドライバーのパフォーマンスは類似している必要があります。どの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を設定したことを認める必要があります。)

構文も少し好きですが、それは私だけです。

18
Robert Calhoun

Microsoftはついに、PHPでうまく機能するようにネイティブドライバーを調整するためのいくつかのリソースをコミットしました。私は現在、Apache 2.464ビットでベータテストを行っています。

ベータPHP 7 SQL_SRV 64ビットドライバー

4
Matt Smith