データベースへの接続に関する情報が格納されている 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());
?>