2012-07-23 8 views
10

¿Qué consideraciones debo tener en cuenta al elegir entre el controlador SQLSRV y el controlador PDO (para PHP con el servidor MS SQL)?Controlador SQLSRV contra el controlador PDO para PHP con MS SQL Server

Vi esta publicación previa de Stackoverflow (When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?) pero la respuesta parece faltar y no menciona todos los beneficios de usar el controlador SQLSRV como se menciona en this article.

Estoy buscando un completo y actualizado (por ejemplo, ¿todavía es el caso de que el controlador SQLSRV solo está disponible para Windows?) Respuesta que los programadores pueden referirse como un recurso.

Respuesta

7

PDO le permite escribir el código para que sea razonablemente DB-neutral.

Si quiere realmente DB-neutral, querría usar una capa de abstracción de base de datos completa como NotORM - con PDO simple, aún tendría que tener cuidado con la diferencia de sintaxis SQL, pero al menos su PHP básico el código sería DB-neutral.

Ser DB neutral puede no parecer importante ahora - si está usando SQL Server, entonces probablemente le hayan dicho que eso es lo que se requiere y nada más, pero no se puede predecir cómo cambiarán las cosas en el futuro, así que si la elección es entre un controlador DB-neutral y un controlador específico de DB, y usted no tiene ningún otro motivo para una preferencia, entonces vaya con el neutral ... hará que la vida sea una mucho más fácil si su empresa se hace cargo y el nuevo jefe quiere utilizar Oracle como el DB!

Además, debido a que es DB neutral, PDO es más estándar y más conocido en la comunidad PHP. Obtendrá mucha más ayuda con PDO desde sitios en línea (como este) que con el controlador MSSQL.

10

SQLSRV y PDO_SQLSRV son los dos current-generation php drivers available from Microsoft, pero ambos utilizan el mismo código debajo: SQL Server Native Client 11. (Es por eso que no hay versión para Mac o Linux de los controladores PHP: no son más que las envolturas.) Rendimiento de los dos los conductores deben ser similares; es solo una cuestión de qué API prefieres.

En la mayoría de los casos se utilizaría el controlador PDO_SQLSRV debido a consideraciones multiplataforma. Sin embargo, después de ver los dos controladores para un nuevo proyecto (pequeño) fui con el controlador SQLSRV porque devuelve datos como [un mapa de] los tipos de datos SQL Server subyacentes, mientras que el PDO_SQLSRV devuelve todo como una cadena.

Así que si su SQL es:

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

Entonces var_dump de la fila de PDO_SQLSRV da:

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

mientras que el conductor SQLSRV da:

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

Me llevó frutos secos ese PDO_SQLSRV arroja todos mis datos a una cadena, ya sea que yo quisiera o no, así que utilicé SQLSRV. (Tengo que admitir que establecí ReturnDatesAsStrings=true porque era demasiado vago para lidiar con la clase de fecha.)

También me gusta la sintaxis un poco mejor, pero así soy yo.

4

Microsoft finalmente ha comprometido algunos recursos para adaptar su controlador nativo para que funcione bien con PHP. Actualmente estoy probando beta en Apache 2.4 64 Bit.

Beta PHP 7 SQL_SRV 64Bit Driver

Cuestiones relacionadas