2012-07-23 4 views
10

Welche Überlegungen sollte ich bei der Wahl zwischen SQLSRV-Treiber vs. PDO-Treiber (für PHP mit MS SQL-Server) berücksichtigen?SQLSRV-Treiber vs. PDO-Treiber für PHP mit MS SQL Server

Ich sah diese vorherige Stackoverflow Post (When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?) aber die Antwort scheint ein bisschen fehlt und nicht alle Vorteile der Verwendung des SQLSRV-Treibers erwähnt, wie in this article erwähnt.

Ich bin auf der Suche nach einer umfassenden und aktuellen (zB ist es immer noch der Fall, dass SQLSRV-Treiber nur für Windows verfügbar ist?) Antwort, die Programmierer als Ressource bezeichnen können.

Antwort

7

Mit PDO können Sie Ihren Code so schreiben, dass er vernünftig DB-neutral ist.

Wenn Sie wirklich DB-neutral wollen, sollten Sie eine vollständige DB-Abstraktionsschicht wie NotORM verwenden - mit einfachem PDO müssen Sie immer noch auf Unterschiede in der SQL-Syntax achten, aber zumindest auf Ihr grundlegendes PHP Code wäre DB-neutral.

DB-neutral scheint jetzt nicht wichtig zu sein - wenn Sie SQL Server verwenden, wurde Ihnen wahrscheinlich gesagt, dass dies erforderlich ist und nichts anderes - aber Sie können nicht vorhersagen, wie sich die Dinge ändern werden die Zukunft, also wenn die Wahl zwischen einem DB-neutralen Fahrer und einem DB-spezifischen Fahrer liegt, und Sie keinen anderen Grund für eine Vorliebe haben, dann gehen Sie mit dem neutralen .... es wird das Leben zu einem machen viel einfacher, wenn Ihre Firma übernommen wird und der neue Chef Oracle als DB nutzen will!

Da PDO auch DB-neutral ist, ist es in der PHP-Community standardmäßiger und bekannter. Sie erhalten viel mehr Hilfe mit PDO von Websites online (wie diesem) als mit dem MSSQL-Treiber.

10

SQLSRV und PDO_SQLSRV sind die beiden current-generation php drivers available from Microsoft, aber beide verwenden den gleichen Code darunter: SQL Server Native Client 11. (Deshalb gibt es keine Mac oder Linux-Version der PHP-Treiber: Sie sind nur Wrapper.) Leistung der beiden Fahrer sollten ähnlich sein; Es ist nur eine Frage, welche API Sie bevorzugen.

In den meisten Fällen würde man wegen plattformübergreifender Überlegungen den PDO_SQLSRV-Treiber verwenden. Nachdem ich jedoch beide Treiber für ein neues (kleines) Projekt angeschaut habe, ging ich mit dem SQLSRV-Treiber, weil es Daten als [eine Karte von] den zugrunde liegenden SQL Server-Datentypen zurückgibt, während PDO_SQLSRV alles als String zurückgibt.

Also, wenn Ihr SQL ist:

SELECT 1234 as integer, Cast(123.456 as float) as float, 
     getdate() as date, '1234' as string1,'123.456' as string2; 

Dann Var_dump der Reihe von PDO_SQLSRV gibt:

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" 
    } 
    } 

während der SQLSRV Fahrer gibt:

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" 
    } 
    } 

Es trieb mich Nüsse dass PDO_SQLSRV alle meine Daten in eine Zeichenfolge umgewandelt hat, ob ich es wollte oder nicht, also habe ich SQLSRV verwendet. (Ich muss zugeben, ich setzte ReturnDatesAsStrings=true, weil ich zu faul war, um mit der Datumsklasse umzugehen.)

Ich mag auch die Syntax ein bisschen besser, aber das bin nur ich.

4

Microsoft hat endlich einige Ressourcen für die Anpassung des nativen Treibers an PHP bereitgestellt. Ich bin derzeit Beta-Test auf Apache 2.4 64 Bit.

Beta PHP 7 SQL_SRV 64Bit Driver