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();
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,如果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
Run Code Online (Sandbox Code Playgroud)
一种可能的方法是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('your@email.com','connection problem',$e->getTraceAsString());
$db = new PDO (/*rollback connection infos of a local database*/);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这将向您发送一封邮件,其中包含错误的痕迹,阻止您的用户在告诉您出错的同时看到它.
以下是pdo语句返回的错误代码的参考.
当您的主机没有响应时,您就会知道 - 主机将停止响应.然后你必须查看错误日志并找到特定错误的错误消息.
所以,只保留display_errors=0,因为它是必须在生产环境反正.
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |