栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

mysqli还是死了,它一定要死吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysqli还是死了,它一定要死吗?

它必须死吗

恰恰相反,

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即可编写错误日志并定期检查它们。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号