如果我使用如下代码:
$update_result = mysqli_query( $link , $sql_update_login ) or die ('Unable to execute query. '. mysqli_error($link)); 它会死掉还是可以在之后提出其他查询?像将错误日志记录到另一个表的预定函数一样?如:
$update_result = mysqli_query( $link , $sql_update_login ) or function('$query, $error); “或”之后还有哪些其他选择?我没有在文档中找到它,任何线索都值得赞赏。
它必须死吗
恰恰相反,它die()永远都不会。 PHP是一种不良遗传的语言。遗传很差。和or die()错误消息是最差的雏形之一:
死掉会抛出错误消息,向潜在的攻击者透露一些系统内部信息 这会给无辜的用户带来奇怪的消息,并使他们无法使用任何界面,因此他们很可能会退出。 它会杀死中间的脚本,因此可能导致显示的设计破损(或根本没有设计)(即,用户请求的页面渲染不完整) 不可挽回地杀死脚本。引发异常时可以捕获并正常处理 die()没有提示您发生错误的位置。在相对较大的应用程序中,要找到它会很麻烦。 因此,即使是进行临时调试die(),也切勿使用mysql错误:有更好的方法。
对于您的查询,您只有2个选择:
如果您打算mysqli_query()在您的应用程序代码中使用所有方法(这是错误的,但是在StackOverflow上您将永远不会被其他任何方式使用),则可以使用trigger_error()而不是die。它将引发传统的PHP错误,并将根据PHP设置自动记录。
$result = mysqli_query($link , $sql) or trigger_error($link->error."[ $sql]"); 如果要mysqli_query()用作抽象库的一部分,则必须抛出新的Exception,因为您将需要一些堆栈跟踪(始终随异常一起提供)以了解发生此错误的位置。
但是,您不能new Exception与OR运算符一起使用。因此,代码变得更长一些:
$result = mysqli_query($link , $sql); if (!$result) { throw new Exception(mysqli_error($link)."[ $sql]"); } 没什么大不了的,因为您只需编写一次即可。
更新。事实证明,mysqli能够自行抛出异常,这可以使我们免于手动编写处理代码:
$result = mysqli_query($link, $sql); 如果发生错误,此代码将引发异常,因此,您将始终获得通知,而无需额外的代码。但是,在前面的示例中,我们将SQL查询添加到错误消息中,这可能非常有价值-因此,人们也可以坚持上述方法。
重要提示
预定功能,将错误日志写入另一个表?
这显然是一个坏主意。特别是如果您要将错误消息写入先前尝试失败的同一介质。 错误必须记录到最可靠的介质中-纯文本日志。因此,只需设置您的PHP即可编写错误日志并定期检查它们。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。