2012-07-23 15 views
10

SQLSRVドライバとPDOドライバ(MS SQLサーバを使用するPHP用)のどちらを選択する際に考慮すべき点はありますか?MS SQL Serverを使用したPHP用SQLSRVドライバ対PDOドライバ

私はこの前の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のみで利用可能ですか?)、プログラマがリソースとして参照できる答えを探しています。

答えて

7

PDOでは、DBに中立的なコードを書くことができます。

真にDB中立であることを望むなら、NotORMのような完全なDB抽象化レイヤーを使用することをお勧めします - 普通のPDOを使用する場合、SQL構文の違いに注意する必要がありますが、少なくとも基本PHPコードはDBに中立です。

DB中立なので、SQL Serverを使用している場合は、必要とされているものと何も言われていない可能性がありますが、事態がどのように変化するかは予測できません将来的には、DB中立ドライバとDB固有ドライバの選択肢があり、それ以外の理由がない場合は、中立のドライバを使用してください。あなたの会社が買収され、新しい上司がOracleとしてDBを使用したい場合は、もっと簡単に!

また、DB中立であるため、PDOはPHPコミュニティでより標準的でよく知られています。 MSSQLドライバよりも、オンラインのサイト(このようなサイト)からのPDOに関する多くの助けが得られます。

10

SQLSRVとPDO_SQLSRVは2つのですが、どちらも同じコードをSQL Server Native Client 11の下に使用しています(これはMac版またはLinux版のPHPドライバがないためです)ドライバは似ているはずです。それはあなたが好むAPIの問題です。

プラットフォーム間の考慮事項のために、ほとんどの場合、PDO_SQLSRVドライバを使用します。しかし、PDO_SQLSRVはすべてを文字列として返すのに対し、新しい(小)プロジェクトの両方のドライバを調べた後、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を設定することを認めなければなりません。なぜなら私は日付クラスを扱うのが面倒だからです。)

私は構文が少し良くなっていますが、それは私だけです。

4

マイクロソフトでは、最終的にPHPでうまく動作するようにネイティブドライバを調整するためのリソースを提供しています。私は現在、Apache 2.4 64ビットでベータ版をテストしています。

Beta PHP 7 SQL_SRV 64Bit Driver

関連する問題