当前位置: 首页 > 面试题库 >

如何确保从MySQLi :: multi_query捕获了所有错误?

白越
2023-03-14
问题内容

在对文档multi_query说:

如果第一条语句失败,则返回FALSE。要从其他语句检索后续错误,必须首先调用mysqli_next_result()。

在对文档next_result说:

成功返回TRUE,失败返回FALSE。

最后,文档中发布的示例multi_query使用返回值from next_result来确定何时不再有查询。例如停止循环:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

    /* execute multi query */
    if ($mysqli->multi_query($query)) {
        do {
            /* store first result set */
            if ($result = $mysqli->store_result()) {
                while ($row = $result->fetch_row()) {
                    printf("%s\n", $row[0]);
                }
                $result->free();
            }
            /* print divider */
            if ($mysqli->more_results()) {
                printf("-----------------\n");
            }
        } while ($mysqli->next_result()); // <-- HERE!
    }

    /* close connection */
    $mysqli->close();
    ?>

我不知道提供的查询数量,也不知道将要执行的SQL。因此,我不能仅将查询数量与返回结果数量进行比较。但是,如果第三个查询是损坏的查询,那么我想向用户显示错误消息。但是我似乎没有办法判断是否next_result失败是因为没有更多的查询要执行,还是因为SQL语法错误。

如何检查所有查询中的错误?


问题答案:

尽管有文档中的代码示例,但更好的方法可能是这样的:

if ($mysqli->multi_query(...)) {
  do {
    // fetch results

    if (!$mysqli->more_results()) {
      break;
    }
    if (!$mysqli->next_result()) {
      // report error
      break;
    }
  } while (true);
}


 类似资料:
  • 我对JavaScript文件中的API(Node.js中运行的npm模块)进行了以下调用,我希望在其中捕获所有错误,以便能够优雅地处理它们。但是,如果(例如)传递了一个错误的API-KEY或一个不存在的城市名称,则该API的内部代码中存在一个错误,该错误未被try/catch捕获: 相反,显示错误并停止执行: JavaScript中是否有一种方法可以像Java和C中那样捕获所有错误?

  • 我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否

  • 问题内容: 说我有以下代码: 现在,如果抛出,我该如何捕捉?一种方法是提供自己的实现,并为其中的设置custom 。另一种方法是将其包装为包含try-catch -block 的本地(匿名)。也许还有其他类似的解决方法。但是…以某种方式感觉很脏,我觉得这不应该那么复杂。有没有干净的解决方案? 问题答案: 干净的解决方法是使用而不是。这将返回一个,您可以用来检索结果或任务异常:

  • 我有以下代码。 然而,它没有捕捉到所有的错误,我仍然得到“throw er//未处理的“错误”事件。 这是为什么呢? 例如,直到我添加了一个特定的错误处理程序,它才捕获parse()函数中的错误。即使不添加,我的try/catch是否应该捕获此错误? 提前致谢!

  • 问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I

  • 问题内容: 在Linux下的python 2.6中,我可以使用以下命令来处理TERM信号: 除了仅一次设置一个信号,是否可以为该过程接收的所有信号设置处理程序? 问题答案: 您可以循环浏览信号模块中的信号并进行设置。