如何使用pdo连接显示我自己的错误而不是默认错误?

时间:2013-05-15 08:57:27

标签: php pdo

我想使用pdo连接显示自己的错误而不是默认错误。错误可以归类为

1。如果数据库不存在

2. 拒绝访问

3. 主机名InValid

PDO连接的简单代码是

<?php
$host = 'localhost';
$dbname = 'test';
$user = 'root';
$password = '';

try {
    $db = new PDO("mysql:host=$host;dbname=$dbname", $user, $password); 

} catch (PDOException $e) {
 echo $e->getMessage(); 
}

?>

现在,我可以在catch部分使用if语句吗?如果是这样,我怎样才能实现输出?我不想使用getMessage()功能。

由于

2 个答案:

答案 0 :(得分:0)

首先,使用构造函数的driver_options参数来使错误抛出异常:

$db = new PDO("mysql:host=$host;dbname=$dbname", $user, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));

然后在你的catch块中,你将不得不分析异常的code属性:

switch($e->getCode()) {

    ....

}

您可以在mysql manual

中找到代码列表及其含义

答案 1 :(得分:0)

正如@ hek2mgl已经显示的那样,首先需要告诉驱动程序你想要例外。要获得实际错误,您可以查看例外代码,如此;

...
} catch (PDOException $e) {
    switch ($e->getCode()) {
        case 1041: //  Error: 1041 SQLSTATE: HY000 (ER_OUT_OF_RESOURCES)
            $message = 'MySQL is out of resources!';
            break;

        case ...

        default:
            $message = $e->getMessage(); 
            break;
    }
}
...

您可以在此处找到SQLSTATE错误代码列表http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html

根据驱动程序的不同,您可能需要查看PDO::errorCode

http://php.net/manual/en/pdo.errorcode.php