【问题标题】:A function to capture all MySQL errors?捕获所有 MySQL 错误的函数?
【发布时间】:2010-09-06 01:11:42
【问题描述】:

有没有人有一个 PHP 函数,例如,如果 mysql_error() 由于 MySQL 错误而发生,它不会输出它?

不输出它的意思是它不会在实时站点上显示错误,因为我会将它与我拥有的另一个函数一起使用,如果我有一个 MySQL 错误函数,那将是一种享受。

我只是觉得这很烦人,因为我现在这样做:

$q = mysql_query("SELECT * FROM something");

// if error occurs
if(!$q) {
   echo 'Error' . mysql_error();
} else {
  // else no errors so continue
}

在我的一些网页上看到我在一个脚本中有几个查询,我希望能够在我的所有 PHP 代码的底部包含该函数,并且如果我的脚本中的任何地方出现 MySQL 错误以获取该函数捕获错误,而不是执行我上面引用的代码的倍数。

这样我可以为自己节省很多不必要的工作,并使用我的电子邮件错误功能来实现它。

【问题讨论】:

  • 我等不及你有一个需要调试的数据库错误,因为页面正在加载但没有数据......
  • 我怀疑代码是否会通过标记器 - 您缺少一个句点(用于连接字符串和 mysql_error() 返回)
  • 我只是很快写了那段代码,那不是我从我的一个网页复制的实际代码,因此有两个错别字,不用担心。我只是快速输入了它,但为了人们无需提及它而对其进行了更正。

标签: php mysql function


【解决方案1】:

一种方法是编写自己的函数,比如 sql_query,它看起来像这样:

function sql_query($sql) {
    $q = mysql_query($sql);
    // if error occurs
    if(!$q) {
       //your error handling code
    } else {
       return $q;
    }
}

然后,您可以在任何想要执行 sql 查询的地方使用此函数。

更好的方法是使用 PDO 和其中的异常等。

【讨论】:

  • PDO?不明白你的意思。这看起来像我在看,谢谢 Jords :) 我想我会这样使用: sql_query($sql) $sql 变量是我想要查询的代码?如果它失败了,它显然会做我的错误处理代码
  • 是的。 PDO 是 php 数据对象 - 谷歌 PHP PDO,你会发现它。这是一个非常好的数据库抽象层,然后您可以使用异常来更好地处理此类事情,并且您还可以获得非常好的准备好的语句。
【解决方案2】:

最可靠的解决方案可能是使用trigger_error()。通过这种方式,您可以绑定到已经准备好处理开发和生产环境的 PHP 错误处理系统。

$querySql = 'SELECT * FROM `foo`';
$queryResult = mysql_query($querySql);

if (!$queryResult) {
    trigger_error('Unable to execute query: ' . $querySql, E_USER_NOTICE);
}

当然,最方便的方法是为mysql_query() 制作一个自动触发错误的装饰函数。 DRY 原则始终适用。

【讨论】:

  • 嗨,E_USER_NOTICE 这是什么?这对我来说是新的,而且 trigger_error 以前也从未听说过。谢谢
  • 还要补充以上内容,它是否显示错误消息但未显示有关数据库等的信息的错误,这在实时站点上显然很好,可以避免提供有关查询等还是我想错了?
  • 有人可以在我的回复中回答上述问题吗?真的有兴趣知道吗?谢谢
  • 嗨 erisco,由于某种原因,我输入了它,但找不到任何可以很好地描述它的确切含义的东西,我也用谷歌搜索过,我只是不明白它们的确切含义描述性不够。
【解决方案3】:

制作或使用数据库抽象层。

使用异常并捕获所有异常。然后你有一个“设置”来打开或关闭错误的显示,或者更好的是,将它们记录到文件中。

【讨论】:

    【解决方案4】:

    我想我不明白你需要什么。

    如果你想在页面上“隐藏”错误,你可以使用 de '@' 前缀:

    $q = @mysql_query("SELECT * FROM 某事");

    使用“@”,错误会被抑制给最终用户。

    【讨论】:

    • 应该避免错误抑制!你应该解决问题,而不是隐藏它。
    • 错误可能是由于与查询本身无关的错误(如语法错误)造成的。也不应该在实时站点上显示它们,因为它可以专门向攻击者透露很多信息,因此为什么我说与我的电子邮件错误功能集成所以我会收到确切错误的通知但用户会收到错误您指定的。
    • @PHPLOVER, @ 仍然是处理这个问题的糟糕方法。如前所述,使用异常并捕获它们并将它们记录到文件中,这样访问者就不会看到它们。
    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 2013-03-14
    • 2012-10-17
    • 2017-08-14
    • 2016-12-28
    • 2013-04-19
    • 2018-08-28
    • 1970-01-01
    相关资源
    最近更新 更多