0

我目前有这个 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 对象的错误属性的值。我得到以下信息:

命令不同步;你现在不能运行这个命令

4

1 回答 1

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;
                }
            }
        }
于 2013-04-18T00:11:29.713 回答