PHP:函数脚本中的现代错误处理
在my functions.php中,我在网站的页面模板中使用了一组函数。我想知道处理错误的最佳方法是什么。目前,my functions.php如下所示:PHP:函数脚本中的现代错误处理,php,mysql,Php,Mysql,在my functions.php中,我在网站的页面模板中使用了一组函数。我想知道处理错误的最佳方法是什么。目前,my functions.php如下所示: // include database require_once 'system/db.php'; // Functions // ========= function getUrlsPhotos($db, $resultId) { $query = "SELECT * FROM pictures WHERE result_i
// include database
require_once 'system/db.php';
// Functions
// =========
function getUrlsPhotos($db, $resultId) {
$query = "SELECT * FROM pictures WHERE result_id=$resultID ORDER BY id ASC";
$results = $db -> query($query);
// Was there an error?
if ($db -> error) {
$output = 'error_getting_photos';
} else {
// loop for getting photos... ... ...
$output = $array_photos;
}
return $output;
}
function getActivityName($db, $activitiesId) {
$query = "SELECT * FROM activities WHERE id=$activitiesId LIMIT 1";
$results = $db -> query($query);
if ($db -> error) {
$output = 'db_error_getting_activityname';
} else {
$result = $results -> fetch_assoc();
$output = $result;
}
return $output;
}
我的目标是以某种方式查看是否发生了错误,当然用户不会看到它。对于我的所有函数,什么是处理错误的有效方法?我需要初始化什么
---编辑:---
在阅读有关错误处理的更多信息后,我提出了以下用于在数据库中存储错误的脚本:
<?php
function errorHandler($errno, $errstr, $errfile, $errline) {
static $db;
if (empty($db)) {
$db = new PDO(DSN, DBUSER, DBPASS);
}
$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())";
$stmt = $db->prepare($query);
switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
case E_DEPRECATED:
case E_USER_DEPRECATED:
case E_STRICT:
$stmt->execute(array("NOTICE", $errstr, $errfile, $errline));
break;
case E_WARNING:
case E_USER_WARNING:
$stmt->execute(array("WARNING", $errstr, $errfile, $errline));
break;
case E_ERROR:
case E_USER_ERROR:
$stmt->execute(array("FATAL", $errstr, $errfile, $errline));
exit("FATAL error $errstr at $errfile:$errline");
default:
exit("Unknown error at $errfile:$errline");
}
}
set_error_handler("errorHandler");
您可以在php中使用设置错误处理程序进行自定义错误处理
查看更多信息
使用并创建一个(理想情况下,但不是必需的)类来处理错误
set_error_handler(array("ErrorHandling", "doHandleErrors"), E_USER_ERROR | E_NOTICE | E_USER_NOTICE | E_ERROR);
注意:这不会捕捉到宿命。要处理命运,我会使用
你的班级应该是这样的
<?php
class ErrorHandling {
//Methods need to be static
public static function doHandleErrors($strErrorCode, $strErrorMsg, $strErrorFile, $intErrorLine) {
//Handle errors.
//Depending on the $strErrorCode, you would either display the message, or display a http status code 500 & direct to a 500 error page.
//Depending on the severity of the error, e-mail your programmers.
//Try not to display any errors to the consumer/user
//Make the error something like "Ooops, something went wrong." and not "An error occured on file.php, line 23."
//But that may be more a question for UX.se
}
}
谢谢你,我根据你的链接找到了一个脚本。请看我的文章的编辑和最后的两个问题。也许你有个主意?