【问题标题】:PDO OCI: Success with Info exceptionPDO OCI:信息异常成功
【发布时间】:2016-05-18 07:13:31
【问题描述】:

将 PHP 5.5.9 与 PDO_OCI、Oracle 12.1 一起使用。我收到一条 OCI_SUCCESS_WITH_INFO 消息,提示密码即将过期。但是,由于 PDO 将其作为异常抛出,因此未建立连接。当它只是警告或信息性消息时,如何忽略异常?

这是错误信息:

数据库连接失败:SQLSTATE[HY000]:OCISessionBegin: OCI_SUCCESS_WITH_INFO: ORA-28002: 密码将在 41 内过期 天

接着是:

致命错误:在第 257 行的 /htdocs/ciatools_dev/promise/Classes/PromiseVars.php 中的非对象上调用成员函数 setAttribute()

以及产生它的代码:

try {
    $this->dbconn = new PDO("oci:dbname=$dbwc",'username', 'password');
} catch (PDOException $e) {
    echo 'Database Connection failed: ' . $e->getMessage();
}

$this->dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

【问题讨论】:

    标签: php oracle pdo


    【解决方案1】:

    如果这是一个测试系统,请尝试更改用户的密码以查看是否可以解决错误消息。 This thread has more details

    alter user <your user> identified by password;
    

    您还可以更改该用户的配置文件,使其不会过期,这在开发中是可以接受的,但在生产中是一个安全问题。

    --get the the profile 
    SELECT profile FROM dba_users WHERE username = <'Your user'>;
    --change the profile
    ALTER PROFILE <this user's profile> LIMIT PASSWORD_LIFE_TIME UNLIMITED;
    

    【讨论】:

    • 是的,这是解决此错误的好方法,但我正在寻找一种让 PDO 认识到该错误不是致命异常的方法。例如,我还在另一个应用程序中使用 MDB2,在第三个应用程序中使用 OCI8——都连接到同一个数据库——它们显示警告但仍创建连接对象。我想将所有内容都转换为 PDO,但需要先解决此问题。
    猜你喜欢
    • 2014-02-09
    • 2016-09-03
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2017-06-03
    相关资源
    最近更新 更多