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
_サポートが有効であることを示します。
おそらく、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に切り替えましたが、今は機能します:/
うまくいけば、これは少なくとも誰かを助け、同様の問題に直面しています...
あなたの質問からの重要な省略は、あなたがどのようにどのように実行しているかPHPであり、どの資格情報を使用するかです。
IISまたはApache(または別のWebサーバー)を使用しているとすると、PHPプロセスはおそらくローカルシステムアカウントで実行されています。
このアカウントはlocalであるため、remoteSQL Serverにアクセスする権限がありません。
IIS/Apacheサービスを変更して、SQL Serverへの接続が許可されている資格情報(自分のものですか?)未来。
コマンドラインからテストスクリプトを実行してみてください(デフォルトでは資格情報で実行されます)。問題の場所を特定します。
php -r "var_dump(odbc_connect(...));"
このエラーは、何らかの理由でサーバーへの接続を確立できないことが原因で発生する一般的なエラーです。 PHPでどのサーバーを使用しているか、およびそれと一緒に使用されているアプリケーションを確認することが重要です。例Apache、XamppまたはWampなど。
ここにあなたが好きなことができるものがあります。
簡単に説明すると、以下は参照リンクです。
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サーバープロバイダーの名前付きパイププロバイダーエラー
これらのリンクも見てください
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に置き換える必要があります。