3

PHPアプリケーションでOracleデータベースを使用しています。

ユーザーがPHPアプリケーションに接続しようとしました。彼のパスワードの有効期限は切れていますが、ユーザーのプロファイルの猶予期間はnullではないため、ユーザーは引き続きアプリケーションに接続できます。

私がやりたいのは、このユーザーがパスワードを変更してメッセージを表示する必要があることを認識することです。

で試しましたoci_error()が、このユーザーでデータベースに接続できなかったため、何も返されません。

ORA-28001(およびORA-28002)をキャッチしたい

残念ながら、データベース自体の構造を変更することはできません(テーブルまたはフィールドを追加します)。

4

3 に答える 3

2

Narfの答えを拡張すると、これはOracle11.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
于 2011-04-27T23:22:09.893 に答える
1

OCILogonの問題を参照してください-Oracleパスワードは、解決策とともに、非常によく似た問題を期限切れにします。現在のphpバージョンで動作するはずです。また、猶予期間中のOCILogonと非常によく似ています-ORA-28002on SO

于 2011-04-26T12:27:25.503 に答える
1

実行時に警告を有効にoci_connect()してから、カスタムエラーハンドラーで警告をキャッチしてみてください(接続時に@でエラーを無視していないことを確認してください)。これには、php.iniのoci拡張設定も微調整する必要がある場合があります。

于 2011-04-26T12:35:38.900 に答える