как поймать в PHP сообщение о льготном периоде oracle?


Я использую базу данных Oracle в приложении PHP.

Пользователь пытается подключиться к приложению PHP. Срок действия его пароля истек, но льготный период для профиля его пользователя не равен нулю, поэтому он все еще может подключиться к приложению.

Что я хотел бы сделать, так это признать, что этот пользователь должен изменить свой пароль и отобразить ему сообщение.

Я пробовал с oci_error(), но он ничего не возвращает, так как не было сбоя при подключении к базе данных с помощью этого пользователь.

Я хотел бы поймать ORA-28001 (и ORA-28002)

К сожалению, я не могу изменить структуру самой базы данных (добавить дополнительную таблицу или дополнительное поле).

Author: OMG Ponies, 2011-04-26

3 answers

Расширяя ответ Нарфа, это работает для меня с Oracle 11.2

<?php

function my_error_handler($errno, $errstr, $errfile, $errline) {
    if (preg_match('/ORA-28002: [ a-zA-Z]*([0-9])+/', $errstr, $matches)) {
        echo "Your password will expire within ${matches[1]} days\n";
    }
}

set_error_handler("my_error_handler", E_WARNING);

$c = @oci_connect("hr", "welcome", "localhost/XE");
if (!$c) {
    $m = oci_error();
    echo "Connection failed: " . $m['message'] . "\n";
} else {
    echo "Connected OK\n";
    // Prove the connection is valid
    $s = oci_parse($c, "select 'Query is OK' as c from dual");
    oci_execute($s);
    $r = oci_fetch_array($s, OCI_ASSOC);
    echo $r['C'] . "\n";
}

restore_error_handler();

?>

Его вывод для пароля в льготный период:

Your password will expire within 1 days
Connected OK
Query is OK
 2
Author: C J, 2011-04-27 23:22:09

См. Проблема Ocilogon - истечение срока действия пароля Oracle очень похожая проблема с решением. Должен работать в текущей версии php. Также очень похоже на Окилогон во время льготного периода - ORA-28002, ТАК ЧТО

 1
Author: ik_zelf, 2017-05-23 12:03:12

Попробуйте включить предупреждения при выполнении oci_connect(), а затем перехватывать их с помощью пользовательского обработчика ошибок (убедитесь, что вы не игнорируете ошибки с помощью @при подключении). Это может потребовать, чтобы вы также изменили настройки расширения oci в php.ini.

 1
Author: Narf, 2011-04-26 12:35:38