web-dev-qa-db-ja.com

PHP、ODBC、およびWindows認証を使用したSQL Serverへの接続

PHPを使用してODBCデータソースにWindows認証を使用して接続します。SQLServerのサーバーに問題なく接続できるので、コマンドを実行しようとすると、

_$link = odbc_connect("my_odbc","",""); 
_

エラーが発生します:

「警告:odbc_connect():SQLエラー:
[Microsoft] [ODBC Driver 11 for SQL Server] [SQL Server]
ユーザー ''。のログインに失敗しました。C:\ Users ...のSQLConnectのSQL状態28000

私は試した:

_$link = odbc_connect("Driver={ODBC Driver 11 for SQL Server};   
        Server='my_odbc';Integrated Security=SSPI","","");
_

メッセージを返したもの:

警告:odbc_connect():SQLエラー:
[Microsoft] [ODBC Driver 11 for SQL Server]
名前付きパイププロバイダー:SQL Server [53]への接続を開けませんでした。 、SQLConnectのSQL状態08001(C:\ Users ...)

私が何を間違っているのかわからない。

  • _my_odbc_は、別のマシン上のSQL Server(2008)です。そのデータベースに対する管理者権限を持っていないため、SQL Server認証を有効にするなど、その側で何も変更できません。

  • 私はWindows 7を実行していて、PHPバージョン5.6.12を使用しています。

  • phpinfo()は、ODBCサポートが有効になっていること、および_pdo_sqlsrv_サポートが有効であることを示します。

10
Compysaurus

おそらく、SQLsrvプラグイン(SQL Server 2008データベースを使用する他の上司のソフトウェアに接続するために使用しているもの)でPDO(パフォーマンスの違いはそれほど大きくありません)を試す必要があります。

$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

プラグインはこちらからダウンロードできます

https://www.Microsoft.com/en-ca/download/details.aspx?id=36434

Xamppでは、dllをそのフォルダーにコピーする必要があります。

C:\xampp\php\ext

そして、あなたはあなたのphp.iniにその行を追加する必要があります

extension = php_pdo_sqlsrv_56_ts.dll

:新しいphp.iniファイルを考慮できるように、サーバーを再起動することを忘れないでください。

それがあなたのために働くかどうか私に知らせてください

誰かが同じエラーメッセージを持っていて、自分の質問をして答えました here

引用するには...

ご迷惑をおかけして申し訳ありません。

問題は、SQL Server Native Client 11.0をドライバーとして使用していたことです。私はそれをSQL Serverに切り替えましたが、今は機能します:/

うまくいけば、これは少なくとも誰かを助け、同様の問題に直面しています...

2
ourmandave

あなたの質問からの重要な省略は、あなたがどのようにどのように実行しているかPHPであり、どの資格情報を使用するかです。

IISまたはApache(または別のWebサーバー)を使用しているとすると、PHPプロセスはおそらくローカルシステムアカウントで実行されています。

IIS service propertiesApache service properties

このアカウントはlocalであるため、remoteSQL Serverにアクセスする権限がありません。

IIS/Apacheサービスを変更して、SQL Serverへの接続が許可されている資格情報(自分のものですか?)未来。

コマンドラインからテストスクリプトを実行してみてください(デフォルトでは資格情報で実行されます)。問題の場所を特定します。

php -r "var_dump(odbc_connect(...));"
2
timclutton

このエラーは、何らかの理由でサーバーへの接続を確立できないことが原因で発生する一般的なエラーです。 PHPでどのサーバーを使用しているか、およびそれと一緒に使用されているアプリケーションを確認することが重要です。例Apache、XamppまたはWampなど。

ここにあなたが好きなことができるものがあります。

簡単に説明すると、以下は参照リンクです。

  • Pingするかどうかを確認する
  • 有効になっていない場合は、TCP/IP接続のSQL Server構成を有効にします。これを行うには、SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled)を開きます。 SQLサービスを再起動します。
  • サーバーからのリモート接続を有効にする
  • ポートを開きます。これを行うには、Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQLを使用して保存します。
  • 実行中のブラウザサービスを有効にします。SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser実行中に設定します。
  • 接続文字列でのポートの定義
  • 複数のインスタンスが使用されている場合は、マシン名とともにインスタンス名を追加します

サンプル

$user = 'username';
$pass = 'password';
//Use the machine name and instance if multiple instances are used
$server = 'serverName\instanceName';
//Define Port
$port='Port=1433';
$database = 'database';

$connection_string = "DRIVER={ODBC Driver 11 for SQL Server};SERVER=$server;$port;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);

これは、問題に関して私が見つけた便利なリンクです

解決できませんでしたSQLサーバーへの接続を開くことができません-エラー

SQLサーバープロバイダーの名前付きパイププロバイダーエラー

これらのリンクも見てください

名前付きパイププロバイダー:SQL Server [53]への接続を開けませんでした

1
aimme

Regedit HKLM/SOFTWARE/ODBCを見てください。

あなたのフォルダ名は何ですか?

「SQL Server Native Client 11.1」がある場合は、次のようなphpコードを記述する必要があります

odbc_connect("Driver={SQL Server Native Client 11.0};Server=ip;Database=db;", "user", "pass");

ただし、サーバー2008のようなサーバーの一部は、このodbcのように記録されます。

ODBC Driver 11 for SQL Server

次に、SQL Server Native Client 11.0をODBC SQL Server用Driver 11に置き換える必要があります。

0