web-dev-qa-db-ja.com

PHP PDO_mssql SQLSTATE [01002] Adaptive Server接続に失敗しました(重大度9)

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を再インストールしました

11
Jakub Riedl

これらを確認してください:

  1. ディスク上でfreetds.confを見つけます。複数の場所に存在する可能性があり、tsqlが1つを使用している間にPHPが別の場所を使用しました。1つを共通のファイルにシンボリックリンクしてテストするのが最善です。そのファイルの共通の場所は/ etc /または/ usr/local/etc /の横にある〜/ .freetds.conf

  2. freetds.confファイルに[global]セクションがあるはずです。そこにこれらの行を入れてください:

    tdsバージョン= 8.0

    テキストサイズ= 20971520

    クライアント文字セット= UTF-8

もちろん、PHP phpinfo()でロードされたドライバーを確認済みであると思います:mssql、sqlsrvまたはdblib

7
Jorj

これは一般的なエラーメッセージです。何らかの理由でデータベースに接続できません。あなたが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オプションでコンパイル/ビルドする必要があります。

4
bbaassssiiee

私の解決策:

FreeTdsを入手する

  • brew install freetds
  • freetdsインストールのlib /フォルダー内のすべてをPHPインストールディレクトリのlib /フォルダーにコピーし、古いバージョンを置き換えます:libct.4.dyliblibct.alibct.dyliblibsybdb.5.dyliblibsybdb.alibsybdb.dylib

Dblib拡張機能をコンパイルしてインストールする

  • インストールしたすべてのphpバージョンのphpソースをダウンロードします
  • ソースのext/pdo_dblibサブフォルダーに移動します
  • phpizeを実行し、インストールに適したバイナリであることを確認します
  • たとえば、configureコマンドを実行します。パラメータ:./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インストールディレクトリにコピーし、古いバージョンを置き換えます
1
Joaquim d'Souza