Connecting to Oracle with PHP on IIS

I'm having all sorts of trouble...

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

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

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

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

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

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

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

2 ответа

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

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

Другие вопросы по тегам