【问题标题】:Handling mysql errors处理mysql错误
【发布时间】:2017-08-04 09:31:31
【问题描述】:

我目前正在我的网站上工作,并为大多数 sql 查询设置了以下设置

if (!mysqli_query($con,"UPDATE table SET column='$value'WHERE id='$id'"))
{ echo("error: " . mysqli_error($con)); }

工作正常,但经过反思,我认为回显错误是个坏主意。我在数百个文件中多次使用这种方法,所以我询问是否有一种简单的方法可以纠正这个问题,而无需手动访问每个文件,也是记录错误的最佳方法。

将其插入另一个表格、文本文件还是忽略它更好?如果是这样,我可以举一个例子来说明如何去做。

非常感谢。

【问题讨论】:

  • 为其维护一个log 表或名为error_log 的文本文件,或为其使用trycatch 结构。这确实是一种不好的做法。
  • 我们无法告诉您如何处理错误记录,因为这完全取决于您如何处理您的网站以及您有哪些选项可以恢复和检查它们。因此,这将是关于意见的。但是,将技术错误输出回显给用户并不是一个明智的选择。
  • 你知道什么是一个非常非常非常糟糕的主意吗?像您一样将变量放入查询中。我认为它们会受到用户输入的影响?因此,您的代码非常容易受到 SQL 注入的攻击,并且您的数据库可以在几秒钟内被黑客入侵而不会出现问题。查看bobby-tables.com 以了解 SQL 注入以及如何防止它们。他们在那里提供了关于如何使用准备好的语句以及如何使您的代码安全的非常好的示例。现在我永远不会对你的代码进行有效的处理,这是一个非常高的风险。
  • 不幸的是,如果您开始手动显示错误,您将不得不手动重构每个文件。此外,如果您的最终用户不是开发人员,那么显示确切的数据库错误是一个巨大的安全漏洞。想想像an error occured while processing your request 这样的一般错误。

标签: php logging


【解决方案1】:

您可以使用以下函数来放置错误日志:

error_log("Failed to connect to database!", 0);

编辑

看看 php.ini 中的 log_errors 配置选项。它似乎只是做你想做的事。我想你也可以使用 error_log 选项来设置你自己的日志文件。

当 log_errors 指令设置为 On 时,PHP 报告的任何错误都将记录到服务器日志或 error_log 指定的文件中。如果需要,您也可以使用 ini_set 设置这些选项。

(请注意display_errors如果启用此选项,应在php.ini中禁用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多