18

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

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

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

4

3 に答える 3

19

SQLSRV と PDO_SQLSRV は、Microsoft から入手できる 2 つの現世代の php ドライバーですが、どちらも同じコード (SQL Server Native Client 11) を使用しています。 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(日付クラスを処理するのが面倒だったので、設定したことを認めなければなりません。)

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

于 2012-12-07T03:59:47.147 に答える
13

PDO を使用すると、適度に DB に依存しないコードを作成できます。

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

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

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

于 2012-07-23T16:19:15.503 に答える