2016-02-08 57 views
2

使用PHP 5.5.9與PDO_OCI,Oracle 12.1。我收到一條OCI_SUCCESS_WITH_INFO消息,表示密碼即將過期。但是,由於PDO將其作爲例外引發,因此連接未建立。如果只是一條警告或信息性消息,我該如何忽略異常?PDO OCI:信息異常成功

以下是錯誤消息:

Database Connection failed: SQLSTATE[HY000]: OCISessionBegin: OCI_SUCCESS_WITH_INFO: ORA-28002: the password will expire within 41 days

其次:

Fatal error: Call to a member function setAttribute() on a non-object in /htdocs/ciatools_dev/promise/Classes/PromiseVars.php on line 257

和產生它的代碼:

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); 

回答

0

如果這是一個測試系統嘗試改變用戶的密碼以查看是否解決錯誤消息。 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; 
+0

是的,這是一個很好的解決這個錯誤的方法,但是我在尋找的是一種讓PDO認識到錯誤不是致命異常的方法。例如,我還在另一個應用程序中使用MDB2,而在第三個應用程序中使用OCI8 - 都連接到同一個數據庫 - 並且它們顯示警告但仍創建連接對象。我想將所有內容都轉換爲PDO,但需要先解決此問題。 – jlemley