我目前有这个PHP代码。
if (isset($User)){
if (is_object($User)) {
if (!$result_paycon = $mysqli->query("CALL CHECK_CONVENTION(" . $User->id . "," . $row_convention["IDCONVENTION"] . ")")){
printf("Database error");
exit;
}
if (!$result_block = $mysqli->query("SELECT * FROM VIEW_ROOMBLOCK WHERE IDCONVENTION = " . $row_convention["IDCONVENTION"])){
var_dump($result_block);
printf("Database error");
exit;
}
}
}
无论我用它做什么,$ result块的var转储总是bool(false)。然后当我需要在其上使用fetch_array时,它只是告诉我$ result_block是一个非对象。但是,将我的第一个查询从过程调用更改为常规选择似乎可以解决问题,因此将其完全从代码中删除。
我回复了两个调用的SQL查询,如果我直接将它们插入SQL,它们都会返回一些内容。
有什么我不做的吗?
编辑1:仍然没有运气。但是,如果我反转这样的代码:
if (!$result_block = $mysqli->query("SELECT * FROM VIEW_ROOMBLOCK WHERE IDCONVENTION = " . $row_convention["IDCONVENTION"])){
printf("Database error");
exit;
}
if (!$result_paycon = $mysqli->query("CALL CHECK_CONVENTION(" . $User->id . "," . $row_convention["IDCONVENTION"] . ")")){
printf("Database error");
exit;
}
var_dump($result_block);
echo "<br />";
var_dump($result_paycon);
我从var转储中获得以下内容:
object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(10) ["lengths"]=> NULL ["num_rows"]=> int(2) ["type"]=> int(0) }
object(mysqli_result)#5 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
但是对于以前的代码,其中一个只是失败了,我仍然不知道为什么。
编辑2:我刚刚在前一段代码中打印了mysqli对象的error属性的值。我得到以下内容:
命令不同步;你现在不能运行这个命令
答案 0 :(得分:0)
找出问题所在。我需要运行next_result()方法来为另一个查询/结果集准备$ mysqli对象。正如之前在mysql文档中的注释中暗示的那样,free_result应该可行。但出于某种原因,它不适合我。
这样可行:
if (isset($User)){
if (is_object($User)) {
if (!$result_paycon = $mysqli->query("CALL CHECK_CONVENTION(" . $User->id . "," . $row_convention["IDCONVENTION"] . ")")){
printf("Database error");
exit;
}
$result_paycon->close();
$mysqli->next_result();
if (!$result_block = $mysqli->query("SELECT * FROM VIEW_ROOMBLOCK WHERE IDCONVENTION = " . $row_convention["IDCONVENTION"])){
var_dump($result_block);
printf("Database error");
exit;
}
}
}