FreeTDSドライバーとunixODBCを使用して、LAMPベースのアプリとリモートMsSQLデータベース間のPDO接続を管理することにしました。残念ながら、ドライバーはfreetds.confファイルを読み取らず、サーバーのCLIを介して直接設定された環境変数も、putenv()関数によってphpファイルで指定された環境変数も読み取りません。
今、いくつかのデータ:
私がコマンドを使用するとき
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
パスワードの入力を求められ、接続が確立されます。
コマンドの前にTDSVERがない-接続は次のようなメッセージで失敗します。
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
tsql -Cコマンドはそのような出力をエコーします:
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には次のエントリがあります。
[MSSQL]
Host = >IP<
port = 1433
tds version = 7.0
iSQLも失敗します。
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
私のodbc.ini:
[MSSQL]
Description = MS SQL Server
Driver = FreeTDS
TDS_Version = 7.0
Server = >IP<
UID = username
PWD = password
ReadOnly = No
Port = 1433
解決策は本当にシンプルだと思いますが、私はそれを見つけるにはあまりにも愚かです...
今日、私は同じような問題のデバッグに長い時間を費やしました。 freetds.confで「TDSバージョン」を設定していましたが、ODBC接続で使用されていませんでした。freetdsソースコード(connectparams.c:odbc_parse_connect_string)を読んだ後、
odbcinst.iniは、ニシンです。 FreeTDSは設定を確認しません。
指定する設定接続文字列内は常に尊重されます。また、TDSVERなどの環境変数を常に尊重します。
私の本能は、あなたが変える必要がある tdsバージョン= 7.0 に tdsバージョン= 8.0 freetds.confおよびodbc.iniファイルにあり、odbcinst.iniファイルに何かが必要です。以下に、リモートMSSQLサーバーと通信するUbuntu 12.04サーバーで作業しているものを示します。
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
これとまったく同じ問題が発生しましたが、私の構成はすでに正しくセットアップされています。問題は、freetds.confが認識するTDSバージョンが新しいバージョンで変更されたが、明らかに古いバージョンがTDSVER環境変数でまだ機能していることでした。設定ファイルのバージョンを8.0ではなく7.1に設定すると、すべてが機能し始めました。
初期 TDSVER=7.0
問題の最後に次を追加することで解決しましたodbc.ini
ファイル:
[Default]
Driver=/usr/local/lib/libtdsodbc.so
IPに接続する代わりに、構成セクションの名前に接続してみますか?例えば:
isql -v MSSQL