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()... у меня сработало