mysqli or die,它一定要死吗?

新手上路,请多包涵

如果我使用这样的代码:

 $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);

“或”后面的其他选项是什么?我没有在文档中找到它,感谢任何线索。

原文由 Maelish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

是不是必须死

恰恰相反, 它不应该 or die() 永远。

PHP 是一种遗传不良的语言。遗传性极差。并且 or die() 错误消息是最糟糕的基本信息之一:

  • die 抛出错误消息,向潜在的攻击者揭示一些系统内部结构
  • 这样的错误消息会使临时用户感到困惑,因为他们不明白这是什么意思
  • 此外, die 会在中间杀死脚本,让用户无法使用熟悉的界面,因此他们可能会退出
  • 它无法恢复地杀死脚本。虽然可以捕获并优雅地处理异常
  • die() 没有提示 错误发生 的位置。在一个相对较大的应用程序中,找到它会很痛苦。

因此,永远不要将 die() 用于 MySQL 错误, 即使是临时调试:有更好的方法。

无需手动检查错误,只需将 mysqli 配置为在错误时抛出异常,方法是将以下行添加到连接代码中

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

然后按原样编写每个 mysqli 命令,没有任何 or die 或任何其他内容:

 $result = mysqli_query($link, $sql);

如果出现错误,此代码将抛出异常,因此您将始终被告知每个问题,而无需一行额外的代码。

有关如何使错误报告生成准备就绪、统一且整体合理,同时使代码更清晰的更详细说明,您可以在我关于 PHP 错误报告 的文章中找到。

原文由 Your Common Sense 发布,翻译遵循 CC BY-SA 4.0 许可协议

or 只是一个运算符(非常类似于 || )。

The or die() syntax works because or short-circuits, which means that if the first statement is true, True or X will always be true, so X 没有被评估,你的脚本也没有 die

原文由 Blender 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏