2009-12-17 87 views
0

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

现在,它发生了,我想知道我怎么能赶上其他MySQL错误。我在考虑某种通知系统,当mysql_query()失败时会向我发送电子邮件。

当然,我明白,直到发生错误后我才会得到通知,但至少我会立即得到通知,而不是我的同事过来告诉我谁知道后多少其他人也遇到了同样的致命错误。

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

如果是后者,你有什么建议如何防止在未来这样的事情?如果是这种情况,我可能会创建一个类来抽象SQL操作。我知道我应该一直这样做......但是我确实把我的功能集合到了不同的包含文件中,所以至少我做的大部分事情都是正确的。对?

回答

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_wrapper更换每个mysql_query通话。

+0

Thanks and sorry @佩卡,我希望我可以将你的答案都标记为已接受。我想你们都给了我全面的答案和解决方案! – Ricket 2009-12-17 15:31:32

2

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

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

+0

实际上,不是输出错误,而是处理所有事情的一个好方法是a)单点执行查询b)设置set_error_handler()来处理其余的案例 – 2009-12-17 15:15:45