将网站中的所有错误插入mysql数据库(维护数据库中的日志错误)

时间:2015-01-23 11:10:28

标签: php mysql

我正在搜索有助于将所有错误插入mysql数据库的代码或脚本。我不知道它,甚至不是一点点。

给我任何想法。

我该怎么做才意味着在数据库中插入所有错误并将其显示在我的php页面中。

4 个答案:

答案 0 :(得分:2)

PHP允许您指定自己的错误处理程序 - set_error_handler()

function error_handler($errno, $errstr, $errfile, $errline) {
    global $db; //naughty use of global. You could re-create your database connection here instead.

    switch ($errno) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $error = 'Notice';
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $error = 'Warning';
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $error = 'Fatal Error';
            break;
        default:
            $error = 'Unknown';
            break;
    }
    $db->query('INSERT INTO ...'); // create error log here

    return true;
}

// Error Handler
set_error_handler('error_handler');

上面我的自定义函数中使用的参数与手册的名称相同:

  

$ errno 第一个参数errno包含错误级别   提出,作为整数。

     

$ errstr 第二个参数errstr包含   错误消息,作为字符串。

     

$ errfile 第三个参数是   可选,errfile,包含错误所在的文件名   作为一个字符串加入。

     

$ errline 第四个参数是可选的,   errline,其中包含引发错误的行号,作为   整数。

使用这些参数,你应该能够确定错误是什么,它是什么文件,以及它出现在哪一行。

答案 1 :(得分:2)

我会使用类似的东西来记录自定义错误,但你可以修改它来存储所有遇到的错误。

class Logger extends PDO{
    private $_message;
    public function __construct(){
        parent::__construct("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password);//make sure these matches your database configs
        return null;
    }

    public function setMessage($message){
        $this->_message = $message;
        return $this;

    }

    public function saveMessage(){

        if (!isset($this->_message)){
            die('Error Message has not been set');
        }
        $sql = 'INSERT INTO erros_table error_message,date_created';
        $sql.= 'VALUES (:error_message,:date_created)';

        $query = $this->prepare($sql);
        $query->execute([':error_message' => $this->_message,':date_created' => date('y-m-d')]);

        return null;
    }
}

//now you will do something like this
//you can use this custom class anywhere 




try{

    //execute any code here
    //and make sure to throw an error upon any code fail
    //its up to you to throw exceptions on your custom code, but i advice you so

}catch(Exception $e){
    $logger = new Logger();


    $logger->setMessage($e->getMessage())->saveMessage();


}

答案 2 :(得分:1)

你对此问题过于笼统。这里的主要问题是如何跟踪错误,并且不清楚是否要跟踪客户端错误(javascript),服务器端错误(PHP)或事务错误(MySQL)。 如果您想跟踪所有这些,您可以开发自己的错误处理程序。 例如,对于javascript我使用这段代码:

    window.jsErrors = [];
    window.onerror = function(errorMessage, url, lineNumber) {
      err = { "host" : window.location.host, "url" : url,
              "error": errorMessage, "line" : lineNumber,
              "user": "John" };
      window.jsErrors[window.jsErrors.length] = err;
      notify(err);
    } 

notify funcion发出ajax请求。 对于PHP,take a look at this。 对于Java,take a look at Log4J DB appender

答案 3 :(得分:0)

你必须这样做才能在mysql中进行错误处理。

function throw_ex($er){  
  throw new Exception($er);  
}  
try {  
$q = mysql_query("Insert into test (col1,col2,col3) VALUES ('blah','blah','blah')") or throw_ex(mysql_error());  
}  
catch(exception $e) {
  echo "ex: ".$e; 
}