【问题标题】:Is "mysqli_query() or die(mysqli_error())" a good practice?“mysqli_query() 或 die(mysqli_error())” 是一个好习惯吗?
【发布时间】:2014-05-01 12:59:28
【问题描述】:

所以我通常使用这种结构在 php 上执行我的查询,但前几天有人指出这可能是一种不好的做法。

谁能告诉我为什么这是错误的,并给我一些提示,告诉我应该怎么做? 我真的很想学习和改进我的代码。

提前致谢。

【问题讨论】:

  • 我不知道它是否是最好的,但我在我的代码中也这样做
  • 这种做法太糟糕了。
  • 嗯,我认为这对于测试目的来说很好。但是,如果在实际使用过程中出现错误,用户可以看到有关您的数据库的信息,这些信息不应该显示。
  • 所以我不应该使用 mysqli_error() 对吧?
  • mysqli_error() 本身并不是一个坏函数,但幸运的是,mysqli 有一个更好的报告错误的方法——可以告诉它自动抛出异常

标签: php error-handling mysqli


【解决方案1】:

这种做法太糟糕了。这是上个世纪编写代码方式的不良遗传。

相反,您必须在之前添加此行连接代码

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

这将使您无需为每个 mysql 调用编写额外的代码,因为它会使 mysqli 在发生错误时自动抛出Exception

虽然异常本身比常规错误要好得多,因为它可以被捕获并优雅地处理。然而,如果没有被捕获,它将被转换为错误,这又没关系 - 因为常规错误取决于站点范围的设置,可以显示在屏幕上或记录下来。 再次无需编写任何额外的代码。

在开发过程中,只需将display_errors 设置为on,您就会在它们发生的那一刻看到所有错误。
在实时站点上,display_errors 必须转换为 off,但 log_errors 必须改为 on - 它会记录您的异常,供您将来参考。

【讨论】:

  • 那么使用这个我只需要在代码末尾捕获异常然后处理就对了?
  • 实际上,您甚至不必抓住它们。 Try..catch 实际上很少需要,请参见此处:phpdelusions.net/delusion/try-catch
  • PHP 可以很好地处理它们。你试过上面的链接吗?
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 2014-12-22
  • 2020-08-25
  • 2015-05-08
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多