2015-11-29 97 views
0

我試圖在我無法連接到數據庫時發生錯誤(例如,xamp down或數據庫連接關閉等)。我試圖使用PDO::errorCode(),但不會產生reuslts。當數據庫關閉時捕獲'PDOException'

在我的PHP我有一個connection.php和一個方法'連接到數據庫多次,並返回一個新的PDO實例來實現各種查詢。響應顯示錯誤消息,然後顯示所有調用它的php查詢,其中還包括非加密格式的數據庫的名稱和密碼。

  • 我怎樣才能捕捉到這個錯誤,並用一個人類可讀的替代品(不顯示名稱和密碼)替換這個錯誤信息?

CONNECTION.PHP

function connect() 
{ 
    // set database server access variables: 
    $host = "localhost"; 
    $user = "root"; 
    $pass = "password"; 
    $dbase = "dbName"; 

    //Establish a connection 
    $db = new PDO("mysql:host=".$host."; dbname=".$dbase."", $user, $pass); //line 16 
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

    return $db; 
} 

響應

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it. ' in D:\Users\Username\Dropbox\Web\htdocs\sitename\php\data\connection.php:16 Stack trace: #0 D:\Users\Username\Dropbox\Web\htdocs\sitename\php\data\connection.php(16): PDO->__construct('mysql:host=loca...', 'root', 'password') #1 D:\Users\Username\Dropbox\Web\htdocs\sitename\php\function\active-user.php(28): connect() #2 D:\Users\Username\Dropbox\Web\htdocs\sitename\map-floorplan.php(10): include('D:\Users\Username...') #3 {main} thrown in D:\Users\Username\Dropbox\Web\htdocs\sitename\php\data\connection.php on line 16

回答

1

做一個try/catch捕捉異常

try{ 
    $db = new PDO("mysql:host=".$host."; dbname=".$dbase."", $user, $pass); //line 16 
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    return $db; 
} catch(PDOException $e){ 
    $originalError = $e->getMessage(); 
    echo 'something went wrong.. '.$originalError; 
    exit; 
} 
+0

謝謝......現在似乎很簡單,只是不知道如何使用'PDOException'。 – Orbitall

+0

可以捕獲從Exception或Exception類本身擴展的類。有關更多詳細信息,請參閱http://php.net/manual/en/language.exceptions.php上的文檔 – PAlphen

相關問題