我想使用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()
功能。
由于
答案 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
。