PHP:MySQL错误钩子?

时间:2009-12-17 15:08:26

标签: php mysql error-handling

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

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

我理解,当然,在错误发生之前我不会得到通知,但至少我会立即得到通知,而不是我的同事来告诉我谁知道多少其他人们遇到了同样的致命错误。

是否有某种方法可以放入一个钩子,以便PHP在发生错误时自动运行一个函数?或者我是否需要浏览我的代码并将此功能添加到我使用mysql_query()的每个位置?

如果是后者,您对将来如何预防这类事情有什么建议吗?如果是这种情况,我可能会创建一个抽象SQL操作的类。我知道我应该一直这样做...但我确实将我的功能组合成了不同的包含文件,所以至少我做的大多数事情都是正确的。正确?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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来电。

相关问题