1

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

1.如果数据库不存在

2.拒绝访问

3.主机名无效

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()函数。

谢谢

4

2 回答 2

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 手册中找到代码列表及其含义

于 2013-05-15T09:00:16.977 回答
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

于 2013-05-15T09:04:48.907 回答