我正在搜索有助于将所有错误插入mysql数据库的代码或脚本。我不知道它,甚至不是一点点。
给我任何想法。
我该怎么做才意味着在数据库中插入所有错误并将其显示在我的php页面中。
答案 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;
}