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

在my functions.php中,我在网站的页面模板中使用了一组函数。我想知道处理错误的最佳方法是什么。目前,my functions.php如下所示:

// 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
    }
}

谢谢你,我根据你的链接找到了一个脚本。请看我的文章的编辑和最后的两个问题。也许你有个主意?