我有一个自定义错误处理程序,它应该将错误记录到数据库中,但由于某种原因,此错误始终显示在数据库中。每次页面加载" 0在第0行和#34;,其中第一个0是错误级别,在任何文件中,因为它没有提供,在第0行。这很奇怪,因为我和直到现在才见过这个。错误处理程序如下;
public function fatalErrHandlr(){
$errstrArr = error_get_last();
$errno = mysqli_real_escape_string($this->dbc, trim($errstrArr['type']));
$errstr = mysqli_real_escape_string($this->dbc, trim($errstrArr['message']));
$errfile = mysqli_real_escape_string($this->dbc, trim($errstrArr['file']));
$errline = mysqli_real_escape_string($this->dbc, trim($errstrArr['line']));
$query = "INSERT INTO `err` (`errno`, `errstr`, `errfile`, `errline`) VALUES ('$errno', '$errstr', '$errfile', '$errline')";
mysqli_query($this->dbc, $query);
//var_dump(mysqli_error($this->dbc));
echo("<b>There was an error. Check the database.</b>");
//return true;
}
错误处理程序配置为:
register_shutdown_function(array($core, 'fatalErrHandlr'));
答案 0 :(得分:1)
register_shutdown_function
没有配置错误处理程序,它设置了一个在脚本完成时运行的函数。因此,无论是否出现错误,您都会在每次运行脚本时收到日志消息。校正函数为set_error_handler
。它将详细信息作为参数传递给回调,因此您不需要使用error_get_last
public function fatalErrHandlr($errno, $errstr, $errfile, $errline){
$query = $this->dbc->prepare("INSERT INTO `err` (`errno`, `errstr`, `errfile`, `errline`) VALUES (?, ?, ?, ?)");
$query->bind_param('ssss', $errno, $errstr, $errfile, $errline)
$query->execute();
//var_dump(mysqli_error($this->dbc));
echo("<b>There was an error. Check the database.</b>");
//return true;
}