【问题标题】:Recover from fatal error in PHP due to failed MySQL query由于 MySQL 查询失败,从 PHP 中的致命错误中恢复
【发布时间】:2015-11-19 08:25:15
【问题描述】:

我从 AJAX 调用中取回数据,然后我尝试将其插入数据库。我正在使用 Silverstripe 3.1(使用 DB::query()),但这似乎是 PHP 的事情。

如果事务正常,那么一切都按计划进行,但是,如果查询失败,我会收到一个 PHP 致命错误。

基本上,我正在寻找一种在出现致命错误的情况下继续的方法,以便我可以向用户抛出失败的通知。我只想知道查询是否有效。

*编辑以包含代码

$sql = "UPDATE $table SET ,,"; // Syntax error added purposefully
        foreach ($update_array as $key => $value) {
            $name = $formHelpers->some_filter($key);
            $content = $formHelpers->some_filter($value);
            $sql .= " $name='$content',";
        }
        $sql = rtrim($sql, ",");
        $sql .= "WHERE id=$id";

        $result = DB::query($sql);

【问题讨论】:

  • 您能显示导致错误的代码位吗? try catch也许你需要的一切
  • 添加了评论。 SQL 错误是故意生成错误
  • 错误信息是什么? - 直接致命错误(例如缺少 T_SOMETHING 等)和由于未捕获的异常导致的致命错误之间存在差异
  • 错误是:“...[25-Aug-2015 16:30:58 Africa/Johannesburg] PHP 致命错误:无法运行查询:UPDATE form_apas SET ,, profile_corporation_name=.. 。”

标签: php mysql fatal-error silverstripe


【解决方案1】:

我需要查看您的代码才能准确告诉您需要做什么。但是,您正在寻找的概念称为 try、catch、throw。当您进行数据库查询时,请添加一条 catch 语句。然后,如果抛出错误,您可以捕获它并仍然执行某些操作。这里有一个关于 PHP 中 Try、Catch、Through 的教程

http://www.w3schools.com/php/php_exception.asp

【讨论】:

  • 但是,我发布问题的原因是我在堆栈溢出 (stackoverflow.com/questions/12928487/…) 上看到您只能使用 try-catch 块来捕获异常。不是致命错误....
  • OK 抱歉,您是正确的,没有捕获到致命错误。我只是自己测试了一下。但是,如果查询失败,您应该只得到零结果。除非它失败的原因是空指针异常,这会导致致命错误。可以使用 if(!DB){Whatever error stuff you want} 进行测试
  • 不确定为什么会发生这种情况,如果格式正确的查询成功运行,则数据库连接必须正确。 (这就是空指针的意思吗?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
相关资源
最近更新 更多