2012-06-18 15 views
10

Estoy tratando de utilizar Doctrina 2 (para Symfony 2) para conectarse a MSSQLServer desde una máquina Linux.Conexión Doctrina 2 al final de MSSQL Symfony 2 En Linux

He instalado pdo_dblib (controlador PDO para FreeTDS/Sybase DB-lib) y puedo conectarme al servidor db a través de tsql en la línea de comandos y desde php cli también. Por lo tanto, sé que esto está funcionando.

En mi archivo de Symfony/app/config/parameters.yml había especificado database_driver = "pdo_sqlsrv" como el controlador de base de datos (como he leído que este sería manejada por db_lib), pero al intentar ejecutar un comando de base de datos de crear (usando el comando) estoy consiguiendo el error:

Could not create database for connection named could not find driver

entonces un cambio de conductor a database_driver="pdo_dblib" y ahora estoy recibiendo el error:

[Doctrine\DBAL\DBALException]
The given 'driver' pdo_dblib is unknown, Doctrine currently supports only the following drivers: pdo_mysql, pdo_sqlite, pdo_pgsql, pdo_oci, oci8, ibm_db2, pdo_ibm, pdo_sqlsrv

lo que parece que para conectarse a MSSQL mi único la opción es pdo_sqlsrv, así que fui a instalar esto. Sin embargo, I have just discovered here, que

The PDO_SQLSRV extension is only compatible with PHP running on Windows.

Así, el controlador admitido por la doctrina y los que están disponibles para usar en Linux parecen ser mutuamente Exclusivo. De la búsqueda no he encontrado ninguna instancia de este problema que se haya resuelto hasta el momento (Un hombre marcó el problema como resuelto, pero cuando leí el hilo simplemente había movido su dev env a un cuadro de Windows ... no exactamente lo que tenía ¡en mente!).

+0

favor, eche un vistazo aquí: http://stackoverflow.com/questions/8492941/doctrine-2-how-to-add-custom-dbal-driver y dejar un mensaje si la respuesta no aceptado hizo ayudarte. – hakre

+0

Hola Hakre, gracias por tu respuesta. He leído tu publicación y entiendo lo que describes, pero ¿de dónde sacaste esta clase? DRIVER_CLASS: Doctrina \ DBAL \ Driver \ MSSQL \ Driver ¿Tuvo que copiar manualmente desde algún lugar? Como mencioné, estoy usando pdo_dblib. Rob Ganly –

Respuesta

8

Bajo linux (al menos distribuciones basadas en Debian), php necesita el paquete php5-sybase que brinda soporte para Sybase y MSSql.

Si está usando una distribución basada en Debian tendrá que hacer

$ sudo apt-get install php5-sybase 
$ sudo service apache2 restart 

Y

php -r "phpinfo();" | grep "PDO drivers" 

deben darle

PDO drivers: dblib, mysql, sqlite, ...

dblib es en realidad la que necesitamos

ahora Para poder utilizar este controlador con Doctrina, este post: Doctrine 2 - How to add custom DBAL driver? me ayudó a encontrar la respuesta.

La OP sugiere utilizar este bundle on git que hace que las cosas les ayudan.

+0

Gracias Pierre, me encontré con que después que usted ha mencionado en la adición de un conductor DBAL personalizado. También llegué a la etapa en la que recibía el error mencionado en esa publicación, es decir, "El 'controlador' dado pdo_dblib es desconocido".Al ver que no era compatible con la doctrina2, no estaba seguro de si habría problemas más adelante si realizaba esta modificación, así que decidí que no * necesitaba * utilizar MSSQL para el proyecto. Usé MySQL en su lugar, y esto probó sin problemas. Parece que otras personas tienen esa solución funcionando, así que aceptaré tu respuesta. ¡Gracias de nuevo! Rob Ganly –

+0

Seguramente es una mejor idea usar MySQL o Postgre. De hecho, tuve que usar MSSQL como un conector alternativo para leer datos externos. –

+0

Sí, ciertamente tiene más sentido usar MySql con PHP y Doctrine 2/Symfony 2, esto fue entendido y considerado antes de comenzar el proyecto. Sin embargo, ya que significaba ir contra el estado actual de los entornos de desarrollo y producción, decidí purgar la ruta MSSQL. Sin embargo, cuando estos problemas se hicieron evidentes, se tomó una visión mesurada y se abandonó esta ruta. ¡Tal es la vida de un desarrollador! ¡Funciona muy bien con MySQL ahora! Gracias por tu contribución. :) Rob Ganly –