【问题标题】:insert all errors in website into mysql database (Maintain log errors in database)将网站中的所有错误插入 mysql 数据库(维护数据库中的日志错误)
【发布时间】:2015-03-22 09:57:53
【问题描述】:

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

给我任何想法。

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

【问题讨论】:

  • 请给我任何想法,以便我可以完成这项任务

标签: php mysql


【解决方案1】:

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

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】:

    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,其中包含引发错误的行号,作为 整数。

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

    【讨论】:

    • 这可以涵盖警告和信息作为附加类型吗?还是仅用于错误?
    • 感谢您对警告和通知的编辑。我会赞成这个答案,因为它是解决记录错误问题的最清晰和最好的方法。
    • 你可以限制回调来处理你喜欢的。完整的函数签名是set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )。这意味着,默认情况下,它会显示所有错误和警告。您可以通过更改第二个参数来限制正在保存的内容,例如set_error_handler ('error_handler', E_ERROR) 只记录错误。
    • 有一个名为set_exception_handler 的姊妹函数,其作用与上述相同,但专门针对异常。
    【解决方案3】:

    你的问题是太笼统了。这里的主要问题是如何跟踪错误,不清楚是要跟踪客户端错误(javascript)、服务器端错误(PHP)还是事务错误(MySQL)。 如果您想跟踪所有这些,您可以开发自己的错误处理程序。 例如,对于 javascript,我使用以下 sn-p 代码:

        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 函数发出一个 ajax 请求。 对于 PHP,take a look at this。 对于 Java,take a look at Log4J DB appender

    【讨论】:

      【解决方案4】:

      你应该这样做才能在 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; 
      }
      

      【讨论】:

      • 这不是回答问题,因为他需要将其记录到数据库中。
      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2015-12-13
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      相关资源
      最近更新 更多