【问题标题】:PHP: MySQL error hook?PHP:MySQL 错误钩子?
【发布时间】:2023-04-05 16:11:01
【问题描述】:

我一直在用 PHP 和 MySQL 开发一个 Web 应用程序。前几天,我对数据库进行了一些更改,并将一个页面调整为新的表格布局,但没有调整另一个页面。我测试得不够好,所以网站上线了,错误仍然在另一个页面中。这是一个简单的 MySQL 错误,一旦我的一位同事发现它,就可以轻松解决。

现在已经发生了,我想知道如何捕获其他 MySQL 错误。我正在考虑某种通知系统,它会在 mysql_query() 失败时向我发送电子邮件。

我当然明白,直到错误发生后我才会收到通知,但至少我会立即收到通知,而不是我的同事在不知多少人之后才告诉我人们也遇到了同样的致命错误。

有什么办法可以放入一个钩子,以便 PHP 在发生错误时自动运行一个函数?还是我需要检查我的代码并将此功能添加到我使用 mysql_query() 的每个位置?

如果是后者,您对今后如何防止此类事情有任何建议吗?如果是这种情况,我可能会创建一个类来抽象 SQL 操作。我知道我应该一直这样做......但我确实将我的函数集组织到不同的包含文件中,所以至少我做的大部分事情都是正确的。对吧?

【问题讨论】:

    标签: php mysql error-handling


    【解决方案1】:

    你可以使用这样的包装函数:

    function mysql_query_wrapper($query, $link=null)
    {
        if (is_null($link)) {
            $result = myql_query($query);
        } else {
            $result = myql_query($query, $link);
        }
        if (mysql_error($result)) {
            // error occurred
        }
        return $result;
    }
    

    那么您只需将每个mysql_query 调用替换为mysql_query_wrapper

    【讨论】:

    • 谢谢,对不起@Pekka,我希望我可以将您的两个答案都标记为已接受。我想你们都给了我想要的全面答案和解决方案!
    【解决方案2】:

    您可以使用自定义函数使用set_error_handler() 进行错误处理。

    但是,mysql_query 不会触发错误,而是返回 false。只有在尝试处理结果时才会出现错误。在这种情况下,最好定义一个自定义包装函数,调用mysql_query() 并使用mysql_error() 输出可能的错误。这样,如果需要,您可以在出现错误时立即停止您的应用程序。

    【讨论】:

    • 事实上,不是输出错误,而是处理所有事情的好方法是 a) 有一个查询执行点 b) 设置一个 set_error_handler() 来处理其余的情况
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多