PHP PDO_mssql SQLSTATE Ha fallado la conexión de Adaptive Server (severidad 9)

Me estoy conectando a la base de datos MSSQL externa para las exportaciones de PHP55 / osx y tengo un problema extraño.

código:

new \PDO("dblib:host={$hostname};dbname={$dbname}", $user, $pass); 

arroja:

 SQLSTATE[01002] Adaptive Server connection failed (severity 9) 

pero la conexión de CLI funciona correctamente

tsql -S nombre de host -U usuario -P pase -L nombrebd:

 locale is "cs_CZ.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1> 

freetds.conf:

 [hostname] host = ipaddress port = 1433 tds version = 8.0 

tsql -C:

  Version: freetds v0.91 freetds.conf directory: /usr/local/Cellar/freetds/0.91/etc MS db-lib source compatibility: no Sybase binary compatibility: no Thread safety: yes iconv library: yes TDS version: 7.1 iODBC: no unixodbc: no SSPI "trusted" logins: no Kerberos: no 

¿Algunas ideas? He intentado casi todo, me conecto a nombre de host, ip, con y sin puerto, al nombre de instancia, a otro usuario, a las versiones 7.0.7.1,7.2,8.0 de TDS, reinstalo php y freetds

Verifica esto:

  1. localice freetds.conf en su disco. Es posible que exista en varios lugares y tsql usa uno mientras que PHP usó otro. Lo mejor es vincularlos simbólicamente en un archivo común y probarlo. Tenga en cuenta que un lugar común para ese archivo es ~ / .freetds.conf junto a / etc / o / usr / local / etc /

  2. debe haber una sección [global] en su archivo freetds.conf. Coloque allí estas líneas:

    Versión de tds = 8.0

    tamaño del texto = 20971520

    juego de caracteres del cliente = UTF-8

Por supuesto, espero que ya haya comprobado qué controlador está cargado por PHP con phpinfo (): mssql, sqlsrv o dblib

Este es el mensaje de falla genérico. No puede conectarse a la base de datos por el motivo que sea. Dado que usa OSX y elabora, lo más probable es que el problema radique en vincular / cargar la biblioteca compartida. FreeTDS se basa en Sybase 8 (como lo es MS SQL Server). Es un poco arcano para comstackr.

¿Tu PHP estaba enlazado contra el libsybdb.dylib que elabora las instalaciones? Debería poder averiguar usando phpinfo () si esto está incluido en su servidor:

Configure el comando ‘–with-pdo-dblib = shared, / usr / local / Cellar / freetds / 0.91 / lib’

Para que funcione, debes comstackr / construir tu PHP con la opción dblib.

Mi solución:

Obtenga FreeTds

  • brew install freetds
  • copie todo en la carpeta lib / de su instalación de freetds en la carpeta lib / del directorio de instalación de PHP, reemplazando las versiones anteriores de: libct.4.dylib , libct.a , libct.dylib , libsybdb.5.dylib , libsybdb. a , libsybdb.dylib

Comstack e instala la extensión dblib

  • descarga la fuente de php para la versión de php que hayas instalado
  • navegue a la subcarpeta ext/pdo_dblib de la fuente
  • ejecuta phpize , asegurándote de que sea el binario correcto para tu instalación
  • Ejecute el comando configure con, por ejemplo, los parámetros: ./configure --with-php-config=/usr/local/php5/bin/php-config --with-pdo-dblib=/usr/local/Cellar/freetds/0.95.19/
  • ejecutar make
  • copie los modules/pdo_dblib.so en su directorio de instalación de PHP, reemplazando la versión anterior