web-dev-qa-db-ja.com

MSSQL db(PDO、FreeTDS、ODBC)への接続

Ubuntu 12.04サーバーがあり、MSSQLデータベースへの接続を確立しようとしています。

tsqlisqlを使用して接続できましたが、osqlが機能せず、PHP PDOを使用して接続することもできません。作業中..できるだけ多くの情報を提供するように努めます。さらに必要な場合は、お知らせください。編集します。

freetds.conf

[MSSQL]
  Host = TPSACC
  port = 54488
  tds version = 8.0

odbc.ini

[MSSQL]
Description     = MS SQL connection to PRODUCTION database
Driver          = FreeTDS
Database        = PRODUCTION
Server          = TPSACC
UserName        = sa
Password        = pass
Trace           = No
TDS_Version     = 8.0
Port            = 54488

odbcinst.ini

[FreeTDS]
Description = ODBC for Microsoft SQL
Driver      = /usr/local/lib/libtdsodbc.so
UsageCount  = 1
Threading   = 2

〜> isql MSSQL sa pass

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

〜> tsql -S MSSQL -U 'sa' -P 'pass'

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

〜> osql -S MSSQL -U sa -P pass

checking shared odbc libraries linked to isql for default directories...
strings: '': No such file
    trying /tmp/sql ... no
    trying /tmp/sql ... no
    trying /etc ... OK
checking odbc.ini files
    reading /home/toolplas/.odbc.ini
[MSSQL] not found in /home/toolplas/.odbc.ini
    reading /etc/odbc.ini
[MSSQL] found in /etc/odbc.ini
found this section:
    [MSSQL]
    Description     = MS SQL connection to PRODUCTION database
    Driver          = FreeTDS
    Database        = PRODUCTION
    Server          = TPSACC
    UserName        = sa
    Password        = pass
    Trace           = No
    TDS_Version     = 8.0
    Port            = 54488
looking for driver for DSN [MSSQL] in /etc/odbc.ini
  found driver line: "  Driver          = FreeTDS"
  driver "FreeTDS" found for [MSSQL] in odbc.ini
found driver named "FreeTDS"
"FreeTDS" is not an executable file
looking for entry named [FreeTDS] in /etc/odbcinst.ini
  found driver line: "  Driver      = /usr/local/lib/libtdsodbc.so"
  found driver /usr/local/lib/libtdsodbc.so for [FreeTDS] in odbcinst.ini
/usr/local/lib/libtdsodbc.so is an executable file
"Server" found, not using freetds.conf
Server is "TPSACC"
osql: no IP address found for "TPSACC"

PHP私は持っています:

$conn = new PDO ("dblib:Host=TPSACC;dbname=PRODUCTION","$username","$pw");

..または..

$conn = new PDO ("dblib:Host=TPSACC;port=54488;dbname=PRODUCTION","$username","$pw");

そして、両方ともこのエラーを返します。

SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9) 

私はここで数日間立ち往生していて、接続の半分だけが実際に機能する理由を完全に理解することはできません。

ありとあらゆる助けに感謝します、ありがとう!

1
sudo

PHPモジュールがインストールされていますか?

詳細を表示するには、<?php phpinfo() ?>を使用してWebサーバー(Apache2ディレクトリ:Ubuntuではinfo.php)に/var/www/htmlファイルを作成します。 unixODBCによってロードされた構成ファイルを取得するにはodbcinst -jを使用し、FreeTDSの詳細を取得するにはtsql -Cを使用します。がMS db-lib source compatibility: yesかどうかを確認します。

MS db-libが「いいえ」の場合、--enable-msdblibを使用してfreetdsを構成する必要があります。

私の./configure行:

./configure --with-tdsver=8.0 --with-unixodbc=/usr/local --enable-msdblib

次にSudo make && Sudo make install

これは私の作業構成です:

Freetds.conf:

[MSSQL]
Host = 192.168.1.200
port = 1433
tds version = 8.0
client charset = UTF-8

odbc.ini:

[mssql]
Description = MSSQL Server
Driver      = freetds #The odbcinst.ini driver name
ServerName  = MSSQL # The Freetds.conf connection name
Database    = database
TDS_Version = 8.0

odbcinst.ini

[freetds]
Description = MS SQL database access with Free TDS
Driver      = /usr/lib/libtdsodbc.so
Setup       = /usr/lib/x86_64-linux-gnu/odbclibtdsS.so
UsageCount  = 1
4
Lewis Yuburí