Вы должны правильно настроить файл TNSNAMES.ora, в котором хранится информация о подключении к базе данных.Oracle errorr ORA-12514 говорит:
TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе соединения
Функция OCILogon имеет такой синтаксис (я не PHP-разработчикизвините, если я был не прав):
ресурс oci_connect (строка $ username, строка $ password [, строка $ connection_string [, строка $ character_set [, int $ session_mode]]])
В вашем примере находится на третьей позиции параметр «хост».Но в руководстве написано "строка подключения".Эта «строка подключения» должна быть настроена через файл $ ORACLE_HOME / network / admin / tnsnames.ora ($ ORACLE_HOME - это папка, в которой установлен клиент Oracle).
TNSNAMES.ORA выглядит следующим образом (пример):
TEST_DB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = 127.0.0.1) (Port = 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());
?>