数据库关闭时捕获'PDOException'

时间:2015-11-29 12:00:26

标签: php mysql oop pdo exception-handling

如果我无法连接到数据库(例如xamp down或数据库连接等),我试图捕获错误。我曾尝试使用PDO::errorCode(),但不会产生任何重复。

在我的php中,我有一个connection.php和一个方法'多次连接到datatbase并返回一个新的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;
}

RESPONSE

  

致命错误:带有消息的未捕获异常'PDOException'   'SQLSTATE [HY000] [2002]因为目标无法建立连接   机器主动拒绝了。 'in   d:\ Users \用户名\ Dropbox的\网络\ htdocs中\站点名称\ PHP \ DATA \ connection.php:16   堆栈跟踪:#0   d:\ Users \用户名\收存箱\网络\ htdocs中\站点名\ PHP \数据\ connection.php(16):   PDO-> __ construct('mysql:host = loca ...','root','password')#1   d:\ Users \用户名\收存箱\网络\ htdocs中\站点名\ PHP \功能\有源user.php的(28):   connect()#2   d:\ Users \用户名\收存箱\网络\ htdocs中\站点名\地图floorplan.php(10):   include('D:\ Users \ Username ...')#3 {main}引入   d:\ Users \用户名\ Dropbox的\网络\ htdocs中\站点名称\ PHP \ DATA \ connection.php   第16行

1 个答案:

答案 0 :(得分: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;
}