PHP PDO_mssql SQLSTATE La connection à Adaptive Server a échoué (gravité 9)

Je me connecte à la database MSSQL externe pour les exports de PHP55 / osx et j'ai un problème de wierd.

code:

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

jette:

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

mais la connection de CLI fonctionne correctement

tsql -S hostname -U user -P pass -L nombase:

 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 

Des idées? J'ai essayé presque n'importe quoi, se connecter au nom d'hôte, ip, avec et sans port, au nom d'instance, un autre user, versions TDS 7.0,7.1,7.2,8.0, réinstaller php et freetds

Vérifiez ces:

  1. localisez freetds.conf sur votre disque. Il est possible qu'il existe à plusieurs endroits et tsql en utilise un tandis que PHP en utilise un autre. Le mieux est de les relier en un seul file commun et de les tester. Notez qu'un endroit commun pour ce file est ~ / .freetds.conf à côté de / etc / ou / usr / local / etc /

  2. il devrait y avoir une section [global] sur votre file freetds.conf. Mettez là ces lignes:

    tds version = 8.0

    Taille du text = 20971520

    charset client = UTF-8

Bien sûr, je pense que vous avez déjà vérifié quel pilote est chargé par PHP avec phpinfo (): mssql, sqlsrv ou dblib

C'est le message d'échec générique. Vous ne pouvez pas vous connecter à la database pour une raison quelconque. Étant donné que vous utilisez OSX et armser le plus probable, le problème réside dans la binding / chargement de la bibliothèque partagée. FreeTDS est basé sur Sybase 8 (comme MS SQL Server). C'est un peu arcanique à comstackr avec.

Votre PHP était-il lié au libsybdb.dylib qui installe les installations? Vous devriez être capable de savoir à l'aide de phpinfo () si cela est inclus dans votre server:

Configurez la command '–with-pdo-dblib = partagé, / usr / local / Cellar / freetds / 0.91 / lib'

Pour que cela fonctionne, vous devez comstackr / build votre PHP avec l'option dblib.

Ma solution:

Obtenez des FreeTds

  • brew install freetds
  • Copiez tout dans le dossier lib / de votre installation freetds dans le directory lib / de votre directory d'installation PHP, en remplaçant les anciennes versions de: libct.4.dylib , libct.a , libct.dylib , libsybdb.5.dylib , libsybdb. a , libsybdb.dylib

Comstackz et installez l'extension dblib

  • download la source php quelle que soit la version php installée
  • ext/pdo_dblib sous-dossier ext/pdo_dblib de la source
  • lancez phpize , en vous assurant que c'est le bon binary pour votre installation
  • exécutez la command configure avec les parameters eg: ./configure --with-php-config=/usr/local/php5/bin/php-config --with-pdo-dblib=/usr/local/Cellar/freetds/0.95.19/
  • courir make
  • copyr les modules/pdo_dblib.so dans votre directory d'installation PHP, en remplaçant l'ancienne version