0

PHP経由でリモートDB2に接続しようとしています。しかし、いくつかの問題があります。IBM Application developer client は既にインストール済みです。

phpinfo() 出力:

    
        IBM DB2, Cloudscape and Apache Derby support    enabled
        Module release  1.9.4
        Module revision $Revision: 327944 $
        Binary data mode (ibm_db2.binmode)  DB2_BINARY
    

次に、次のようなphpファイルを取得しました。

    
        $database = 'MyDB';
        $user = 'db2inst1';
        $password = 'mypassword';
        $hostname = '1.1.1.1';
        $port = 50000;

        $conn_string = "DRIVER={IBM DB2 ODBC  DRIVER};DATABASE=$database;PORT=$port;HOSTNAME=$hostname;".
        "PROTOCOL=TCPIP;UID=$user;PWD=$password;";

        $conn = db2_connect($conn_string, '', '');
        if ($conn) {
            echo "connection to $database succeeded";
        } else {
            echo "connection to $database failed";
            echo db2_conn_errormsg();
        }
    

このファイルを実行しようとすると、「MyDB への接続に失敗しました」というメッセージが表示され、db2_conn_errormsg() からの目に見える応答がなく、実際に困惑しています。

残念ながら、データベースのあるリモート サーバーに直接アクセスできませんでした。しかし、数か月前、他のクライアントを使用していたときに、まさにこのデータベースに接続することに成功しました。しかし、その時は IBM ADCL をインストールする必要はありませんでした。だからこそ、問題はこちら側にあると推測できます。しかし、そうであったとしても、それを修正することはできませんでした。

申し訳ありませんが、スタックオーバーフローに関するいくつかの質問を複製しましたが、私が見つけたすべての回答は、残念ながら私には役に立ちませんでした。

私は Apache 2.2 と PHP 5.4 を使用しています。お役に立てれば幸いです。

返信ありがとうございます。

4

3 に答える 3

1

サーバーに接続できますか? ポート、サーバー、ファイアウォール規則、ユーザー名、パスワード、データベース名は正しいですか?

受信している SQL コードは何ですか。PHP から SQL コードを取得してみてください。「xx への接続に失敗しました」は独自のコードであるため、役に立ちません。

アプリケーション開発クライアントをインストールしましたか? どの DB2 バージョンを使用していますか? ADCL は古いもので、DB2 8 用でした。DB2 9.7 以降、クライアントの名前が異なり、php モジュールをコンパイルするには IBM Data サーバー クライアントが必要だと思います。詳しくは、次の Web サイトを確認してください: http://www-01.ibm.com/support/docview.wss?uid=swg27016878

db2クライアントを使用して、データベースサーバー(ノード)とローカルマシンのデータベースをカタログ化する必要があると思います。PHP コードは ODBC ドライバーを使用しているようで、ローカルで構成する必要があります。

于 2013-04-23T10:11:11.450 に答える
0

リモートで ibm_db2 または pdo_ibm を動作させることができませんでした。DB2 と Apache が同じマシン (iSeries など) 上にある場合は機能しますが、ホストがリモート DB2 に接続している場合は機能しません。

それぞれのDoctrine2 PHPドライバーを読むと、ホストが「localhost」または「127.0.0.1」でない場合、ODBCにリダイレクトされることがわかります。

このコードは私のために働く

<?php
if (!$db = odbc_connect ( "AS400", $user, $password) )
    echo 'error!';

$result = odbc_exec($db, "select count(*) from $table");
while (odbc_fetch_row($result)) {
    var_dump($result);
    print_r($result);
    echo "\n";
    echo odbc_result($result, 1)."\n";
}

odbc_close($db);

AS400 は ODBC で定義された DSN 名です。

于 2014-09-30T00:31:46.120 に答える
0

接続文字列は、PHP の db2_connect 関数が必要とする ODBC 接続のように見えます:-

DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password;

これはPHP Web ページにあります。

于 2013-04-29T13:00:23.417 に答える