Подключение к Oracle с PHP на IIS - PullRequest
2 голосов
/ 27 августа 2010

У меня возникают всевозможные проблемы ...

Вот код, который я использую:

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

Я получаю следующую ошибку:

Предупреждение PHP: ocilogon (): ociopen_server: Ошибка при попытке получить текст для ошибки ORA-12514 в D: \ Inetpub \ wwwroot ** \ oracle.php в строке 26

Кто-нибудь знаетчто, черт возьми, я делаю не так?

Это PHP4, IIS6, кстати.Я пробовал это и на PHP5, IIS7, не повезло.

Спасибо за любую помощь, которую я могу получить ...: (

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Вы должны правильно настроить файл 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());
?>
0 голосов
/ 27 января 2014

попробуйте использовать постоянное соединение oci_pconnect () ... у меня сработало

...