2012-07-23 8 views
10

Quali considerazioni dovrei prendere in considerazione quando si sceglie tra driver SQLSRV vs driver PDO (per PHP con MS SQL server)?Driver SQLSRV vs driver PDO per PHP con MS SQL Server

Ho visto questo post Stackoverflow precedente (When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?) ma la risposta sembra un po 'carente e non menziona tutti i vantaggi dell'utilizzo del driver SQLSRV come menzionato in this article.

Sto cercando una risposta completa e aggiornata (ad esempio il driver SQLSRV è disponibile solo per Windows?) Che i programmatori possono fare riferimento come risorsa.

risposta

7

PDO consente di scrivere il codice per essere ragionevolmente DB-neutro.

Se si desidera veramente DB-neutro, si desidera utilizzare un livello di astrazione DB completo come NotORM - con un normale PDO, sarà comunque necessario fare attenzione alla differenza di sintassi SQL, ma almeno il PHP di base il codice sarebbe DB-neutro.

Essere DB-neutro potrebbe non sembrare importante ora - se usi SQL Server, probabilmente ti è stato detto che è ciò che è richiesto e nient'altro - ma non puoi prevedere come cambieranno le cose in il futuro, quindi se la scelta è tra un driver DB-neutral e un driver specifico per DB, e non hai nessun altro motivo per una preferenza, allora vai con quello neutrale .... renderà la vita un molto più facile se la tua azienda viene rilevata e il nuovo capo desidera utilizzare Oracle come DB!

Inoltre, poiché è DB neutral, PDO è più standard e più noto nella comunità PHP. Avrai molto più aiuto con PDO da siti online (come questo) che con il driver MSSQL.

10

SQLSRV e PDO_SQLSRV sono i due current-generation php drivers available from Microsoft, ma entrambi usano lo stesso codice sottostante: SQL Server Native Client 11. (Questo è il motivo per cui non c'è nessuna versione Mac o Linux dei driver PHP: sono solo wrapper.) Performance dei due i driver dovrebbero essere simili; è solo questione di quale API preferisci.

Nella maggior parte dei casi si utilizza il driver PDO_SQLSRV a causa di considerazioni su più piattaforme. Tuttavia, dopo aver esaminato entrambi i driver per un nuovo (piccolo) progetto, sono andato con il driver SQLSRV perché restituisce i dati come [una mappa dei] tipi di dati SQL Server sottostanti, mentre il PDO_SQLSRV restituisce tutto come una stringa.

Quindi, se il vostro SQL è:

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

Poi var_dump della fila da PDO_SQLSRV dà:

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

mentre il conducente SQLSRV dà:

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

Mi faceva impazzire che PDO_SQLSRV ha lanciato tutti i miei dati su una stringa, indipendentemente dal fatto che volessi o meno, quindi ho usato SQLSRV. (Devo ammettere che ho impostato ReturnDatesAsStrings=true perché ero troppo pigro per gestire la data class.)

Mi piace anche la sintassi un po 'meglio, ma sono solo io.

4

Microsoft ha finalmente impegnato alcune risorse per personalizzare il proprio driver nativo per funzionare bene con PHP. Attualmente sono beta test su Apache 2.4 64 bit.

Beta PHP 7 SQL_SRV 64Bit Driver