PHP55/osxからエクスポートするために外部MSSQLデータベースに接続していますが、問題が発生しました。
コード:
new \PDO("dblib:Host={$hostname};dbname={$dbname}", $user, $pass);
スロー:
SQLSTATE[01002] Adaptive Server connection failed (severity 9)
しかし、CLIからの接続は正しく機能します
tsql -Sホスト名-Uユーザー-Pパス-L dbname:
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
何か案は?私はほとんど何でも試しました、ホスト名、IP、ポートの有無にかかわらず、インスタンス名、別のユーザー、TDSバージョン7.0、7.1、7.2、8.0に接続し、phpとfreetdsを再インストールしました
これらを確認してください:
ディスク上でfreetds.confを見つけます。複数の場所に存在する可能性があり、tsqlが1つを使用している間にPHPが別の場所を使用しました。1つを共通のファイルにシンボリックリンクしてテストするのが最善です。そのファイルの共通の場所は/ etc /または/ usr/local/etc /の横にある〜/ .freetds.conf
freetds.confファイルに[global]セクションがあるはずです。そこにこれらの行を入れてください:
tdsバージョン= 8.0
テキストサイズ= 20971520
クライアント文字セット= UTF-8
もちろん、PHP phpinfo()でロードされたドライバーを確認済みであると思います:mssql、sqlsrvまたはdblib
これは一般的なエラーメッセージです。何らかの理由でデータベースに接続できません。あなたがOSXを使用し、醸造することを考えると、問題は共有ライブラリのリンク/ロードにあります。 FreeTDSは、Sybase 8(MS SQL Serverと同様)に基づいています。コンパイルするには少し難解です。
PHPは、brewがインストールするlibsybdb.dylibにリンクされていましたか?サーバーに含まれている場合は、phpinfo()を使用して確認できます。
設定コマンド '--with-pdo-dblib = shared、/ usr/local/Cellar/freetds/0.91/lib'
これを機能させるには、PHPをdblibオプションでコンパイル/ビルドする必要があります。
私の解決策:
FreeTdsを入手する
brew install freetds
Dblib拡張機能をコンパイルしてインストールする
ext/pdo_dblib
サブフォルダーに移動しますphpize
を実行し、インストールに適したバイナリであることを確認します./configure --with-php-config=/usr/local/php5/bin/php-config --with-pdo-dblib=/usr/local/Cellar/freetds/0.95.19/
make
を実行しますmodules/pdo_dblib.so
をPHPインストールディレクトリにコピーし、古いバージョンを置き換えます