【发布时间】:2014-05-09 17:56:58
【问题描述】:
try {
self::$dbinstance = new PDO(
"mysql:host=$c[host];dbname=$c[dbname]", $c['user'], $c['password']
);
self::$dbinstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "Errors" . $e->getMessage();
}
在上面的代码中,如果 PDO 无法连接到主机,fatal error 会显示用户名和密码。
Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003]
Can't connect to MySQL server on '172.25.102.65' (10060)' in
D:\xampp\htdocs\mytest\wh_client_2.1\classes\importmodule-class.php:33 Stack trace: #0
D:\xampp\htdocs\mytest\wh_client_2.1\classes\importmodule-class.php(33): PDO-
>__construct('mysql:host=172....', 'host', 'password') #1
一种可能的方法是在php.ini 中关闭display_error=0,但这样我就无法知道我的主机何时没有响应。
有没有办法修改错误信息?
【问题讨论】:
-
您不应该在生产环境中显示错误。您应该抑制和/或捕获错误,并在有任何情况时向自己发送警报。
-
// self::$dbinstance->setAttribute(PDO::ATTR_ERRMODE.... -
@tympaniplayer 我怎么能抛出,因为它是一个未被捕获的异常并且它没有在 catch 块中被捕获
-
通常我会同意@YourCommonSense,但它正在折腾用户名和密码。这不是问题吗?
-
先告诉我,你了解堆栈跟踪的重要性吗?或者你处理错误的所有想法就像 echo "Errors".$e->getMessage();?