PHP fetch_array()在非对象上

时间:2013-04-17 23:32:09

标签: php mysql mysqli

我目前有这个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属性的值。我得到以下内容:

  

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

1 个答案:

答案 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;
                }
            }
        }