PHP 5 подключается к Oracle 9.2 - PullRequest
1 голос
/ 06 апреля 2011

У меня проблемы с подключением из PHP5 к Oracle 9.2. Я пробовал 1.4.2 и 1.4.5 OCI, и я могу подключиться к Oracle 10g и выше. Я настроил тестовый сценарий подключения БД следующим образом:

PHP код:

echo "Testing Connection...";
ociinternaldebug(1);
$conn = oci_new_connect('someuser', 'somepassword', '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.0.2 )(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))');

if (!$conn) {
    $e = oci_error();
    print_r ($e);
}
else
{
    echo('Successful');
}

Я получаю эту ошибку:

OCI8 DEBUG: OCINlsEnvironmentVariableGet at (ext\oci8\oci8.c:1826) 
OCI8 DEBUG L1: using shared pool: (0x2078b68) at (ext\oci8\oci8.c:3028) 
OCI8 DEBUG: OCIHandleAlloc at (ext\oci8\oci8.c:3039) 
OCI8 DEBUG: OCIHandleAlloc at (ext\oci8\oci8.c:3049) 
OCI8 DEBUG: OCIAttrGet at (ext\oci8\oci8.c:3082) 
OCI8 DEBUG: OCIAttrGet at (ext\oci8\oci8.c:3083) 
OCI8 DEBUG L1: (numopen=0)(numbusy=0) at (ext\oci8\oci8.c:3085) 
OCI8 DEBUG: OCISessionGet at (ext\oci8\oci8.c:3096) 
OCI8 DEBUG: OCIErrorGet at (ext\oci8\oci8.c:1632) 
OCI8 DEBUG: OCIHandleFree at (ext\oci8\oci8.c:2218) 
OCI8 DEBUG: OCIHandleFree at (ext\oci8\oci8.c:2221) 
OCI8 DEBUG: OCIErrorGet at (ext\oci8\oci8.c:1632) 
Array
(
    [code] => 1017
    [message] => **ORA-01017: invalid username/password; logon denied**
    [offset] => 0
    [sqltext] => 
)

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Можете ли вы войти в ту же базу данных, используя sqlplus с того же компьютера / с тем же именем пользователя / паролем?

0 голосов
/ 07 апреля 2011

Возможно, у вашего пароля есть какие-то проблемы с набором символов?Есть ли там персонаж, который не поддерживается ни одним из ваших клиентов или серверов?Mabye PHP неправильно преобразует символы, или, возможно, они неправильно преобразуются всякий раз, когда вы используете SQL * Plus, и «правильная» версия, отправленная PHP, кажется неверной серверу.

Запустите этот запрос, чтобы увидеть, какой серверна самом деле делает.Если код возврата равен 1017. Сервер получает неверное имя пользователя или пароль.

select userid, userhost, terminal, returncode, ntimestamp#
from sys.aud$
order by ntimestamp# desc;

Я не думаю, что когда-либо видел ложное сообщение об ошибке Oracle.Но я видел, как некоторые программы неправильно интерпретируют сообщения об ошибках.Например, если срок действия вашего пароля истек, но у вас есть льготный период, Oracle вернет ошибку, но все равно позволит вам войти в систему.SQL * Plus выдаст предупреждение «ORA-28002: срок действия пароля истечет через 8 дней», но некоторые программы неверно интерпретируют это как ошибку входа в систему и могут даже сказать «неверное имя пользователя / пароль».Но это продукт Oracle, и он отображает код ошибки Oracle, так что это очень далеко.

...