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
一种可能的方法是display_error=0
关闭中的php.ini
,但是这样,当主机没有响应时,我将无法得知。
有什么方法可以修改错误消息?
错误处理和错误报告之间有区别。
为了正确处理错误,我认为这ini_set('display_errors',0);
是更好的方法。您不希望在屏幕上显示任何错误消息。
但是,我希望获得有关错误的所有可能的信息,因此我使用error_reporting(E_ALL);
。
错误写入文件error_log中,该文件通常与index.php(或任何直接调用的PHP文件)位于同一级别。您也可以从cPanel访问它。
您的错误可能未被捕获,因为您的代码位于名称空间中,而您想捕获全局名称空间PDOException
。使用a\
表示您要寻找全局脚本PDOException
。一旦发现错误,就可以使用PDOException类的常规方法来回显所需的内容。
try {
$db = new PDO (/*connection infos*/);
}
catch (\PDOException $e) {
switch ($e->errorCode()) {
case 'HY000':
// Or whatever error you are looking for
// here it's the general error code
mail('[email protected]','connection problem',$e->getTraceAsString());
$db = new PDO (/*rollback connection infos of a local database*/);
break;
}
}
这将向您发送一封包含错误痕迹的邮件,从而防止您的用户在告诉您某些错误时看到它。
这是PDO语句返回的错误代码的参考。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句