2

いろいろ困っています...

これが私が使用しているコードです:

$c = OCILogon('user', 'pass', 'host');

次のエラーが発生します。

PHP警告:ocilogon():ociopen_server:26行目のD:\ Inetpub \ wwwroot **\oracle.phpでエラーORA-12514のテキストを取得しようとしたときにエラーが発生しました

誰が私が間違っているのか知っていますか?

それはPHP4、IIS6ところでです。私はこれをPHP5、IIS7でも試しましたが、運がありません。

私が得ることができるどんな助けにも感謝します...:(

4

2 に答える 2

2

データベースへの接続に関する情報が格納されている TNSNAMES.ora ファイルを正しく構成しておく必要があります。Oracle エラー ORA-12514 は次のように述べています。

TNS: リスナーは現在、接続記述子で要求されたサービスを認識していません

関数 OCILogon の構文は次のとおりです (私は PHP 開発者ではないので、間違っていたらすみません):

resource oci_connect ( string $username , string $password [, string $connection_string [, string $character_set [, int $session_mode ]]] )

あなたの例では、3番目の位置パラメータ「ホスト」にあります。しかし、マニュアルには「接続文字列」と書かれています。この「接続文字列」は、ファイル $ORACLE_HOME/network/admin/tnsnames.ora ファイルで構成する必要があります ($ORACLE_HOME は、Oracle クライアントがインストールされているフォルダーです)。

TNSNAMES.ORA は次のようになります (例):

TEST_DB = (説明 =(ADDRESS_LIST =(ADDRESS = (コミュニティ = tcp.world)(プロトコル = TCP)(ホスト = 127.0.0.1)(ポート = 1521)))(CONNECT_DATA = (SID = TESTDB_SID)))

その代わり:

$c = OCILogon('user', 'pass', 'host');

以下を使用する必要があります。

$c = OCILogon('user', 'pass', 'TEST_DB');

...TEST_DB は tnsnames.ora ファイルのサービス名です

それでも補完するために(私のファイル $ORACLE_HOME/network/admin/sqlnet.ora は次のようになります):

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
NAME.DEFAULT_ZONE = world
NAMES.DEFAULT_DOMAIN = world

そして最後に PHP マニュアルの例 (接続文字列は PHP の変数に直接挿入できます):

<?php
$db ="(DESCRIPTION =
     (ADDRESS =
         (PROTOCOL = TCP)
         (HOST = HOSTNAMEHERE)
         (PORT = 1521)
     )
   (CONNECT_DATA = (SID = SIDNAMEHERE))
  )";

$odbc = ocilogon ('user', 'pass', $db) or die( "Could not connect to Oracle database!") or die (ocierror());
?>
于 2010-08-27T17:41:04.337 に答える
0

永続的な接続 oci_pconnect() を使用してみてください...私にとってはうまくいきました

于 2014-01-27T13:49:25.320 に答える