【发布时间】:2011-11-15 18:09:30
【问题描述】:
如果第一条语句失败,则返回 FALSE。要从其他语句中检索后续错误,您必须先调用 mysqli_next_result()。
成功时返回 TRUE,失败时返回 FALSE。
最后,multi_query 文档中发布的示例使用来自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 语法有错误。
如何检查所有查询是否有错误?
【问题讨论】:
-
错误处理会有所不同,具体取决于您配置 mysqli_report();你是怎么配置的?
-
@Billy Oneal,multi_query 只生成一个错误,因为它在遇到第一个语法错误时中断。 multi_query 完成后,检查错误。这将是“是的,有一个错误”或“不,没有错误”的问题。供您参考:stackoverflow.com/questions/14715889/…
-
@mickmackusa ,我试过了,用 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);如果我使用带有 INSERT 命令的 SQL 引用不存在的表,它会给我与查询成功一样的结果。我得到的结果来自 $mysqli->error,它里面有以下文本: Commands out of sync;你现在不能运行这个命令”。
-
@YevgeniyAfanasyev,您对 mysqli_report() 的使用听起来像是真正的蠕虫罐头。我不使用它,但我读到 @php.net/manual/en/function.mysqli-report.php 它适用于“异常”而不是正常的错误消息——这一定是导致 multi_query() 混淆的原因。我猜想因为没有结果集或影响行的东西也没有错误,所以随后的 mysqli 函数被调用是徒劳的。是的?我担心需要一个带有自定义断点的更复杂的解决方案来适应您的 mysqli_report() 技术。一定要分享。
-
@mickmackusa,是的 mysqli_report 从 mysqli 的错误中排除异常。这是更好的手册nusphere.com/kb/phpmanual/function.mysqli-report.htm 如果你没有使用它的任何特殊配置,或者没有,没关系,你不能“检查错误”,就像你之前提到的那样查看是否发生错误,如果你不'不知道应该影响多少行以及多查询脚本中有多少查询。缺乏信息是问题的一部分。