J'ai décidé d'utiliser le pilote FreeTDS et unixODBC pour gérer la connexion PDO entre mon application basée sur LAMP avec une base de données MsSQL distante. malheureusement, il semble que le pilote ne lit pas le fichier freetds.conf, ni les variables d'environnement définies directement via la CLI du serveur ou spécifiées dans le fichier php par la fonction putenv ().
maintenant quelques données:
comme j'utilise la commande
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
Je suis invité à saisir le mot de passe et la connexion est établie.
sans le TDSVER précédant la commande - la connexion échoue avec un tel message:
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "Operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
le tsql -C commande échos une telle sortie:
Compile-time settings (established with the "configure" script)
Version: freetds v0.91
freetds.conf directory: /usr/local/etc
MS db-lib source compatibility: yes
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: no
freetds.conf à l'emplacement indiqué ci-dessus a cette entrée:
[MSSQL]
Host = >IP<
port = 1433
tds version = 7.0
l'ISQL échoue également:
isql -v MSSQL
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
[ISQL]ERROR: Could not SQLConnect
mon odbc.ini:
[MSSQL]
Description = MS SQL Server
Driver = FreeTDS
TDS_Version = 7.0
Server = >IP<
UID = username
PWD = password
ReadOnly = No
Port = 1433
Je suppose que la solution est vraiment simple, mais je suis juste trop stupide pour la trouver ...
J'ai passé beaucoup de temps aujourd'hui à déboguer un problème similaire. J'avais défini "version TDS" dans freetds.conf mais il n'était pas utilisé dans ma connexion ODBC. Après avoir lu le code source freetds (connectparams.c: odbc_parse_connect_string), j'ai découvert que:
odbcinst.ini est un hareng rouge. FreeTDS ne vérifie jamais cela pour les paramètres.
Les paramètres que vous spécifiez dans la chaîne de connexion sont toujours respectés. Il respecte également toujours les variables d'environnement comme TDSVER.
Mon instinct est que vous devez changer votre version tds = 7.0 à version tds = 8.0 dans vos fichiers freetds.conf et odbc.ini ET vous avez besoin de quelque chose dans votre fichier odbcinst.ini. Voici ce que je travaille sur un serveur Ubuntu 12.04 parlant à un serveur MSSQL distant:
freetds.conf
# Define a connection to the MSSQL server.
[mssql]
Host = myserver
port = 1433
tds version = 8.0
odbc.ini
# Define a connection to the MSSQL server.
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssql]
Description = MSSQL Server
Driver = freetds
Database = MyDB
ServerName = myserver
TDS_Version = 8.0
odbcinst.ini
# Define where to find the driver for the Free TDS connections.
[freetds]
Description = MS SQL database access with Free TDS
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1
J'ai rencontré exactement le même problème, mais ma configuration était déjà correctement configurée. Le problème était que les versions TDS reconnues par freetds.conf ont changé dans les versions plus récentes, mais apparemment les anciennes versions fonctionnent toujours dans la variable d'environnement TDSVER. Une fois que j'ai défini la version dans les fichiers de configuration sur 7.1 plutôt que sur 8.0, tout a commencé à fonctionner.
La première TDSVER=7.0
le problème a été résolu en ajoutant ce qui suit à la fin de mon odbc.ini
fichier:
[Default]
Driver=/usr/local/lib/libtdsodbc.so
Au lieu de vous connecter à une adresse IP, essayez de vous connecter au nom de la section de configuration? Par exemple:
isql -v MSSQL