Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP命令不同步;你可以';现在不要运行这个命令_Php_Mysqli - Fatal编程技术网

PHP命令不同步;你可以';现在不要运行这个命令

PHP命令不同步;你可以';现在不要运行这个命令,php,mysqli,Php,Mysqli,我以前见过这个问题,但所有的解决方案都不适合我。主要的解决方案是存储我已经做过的结果。大多数人说我同时运行两个我不理解的查询。我可能不止一次使用下面的函数,但我总是释放并关闭语句,所以不确定为什么会发生这种情况 您很可能会忽略函数的上半部分,它只生成一个字符串来表示类型。这是我制作的完整DB类: (我编辑了它,因为我最初发布了它,并用self::$db替换了self::$connection) 有关MySQL的文档提出了两种可能性: 您使用了一个结果,并试图在释放最后一个结果之前执行一个新查询

我以前见过这个问题,但所有的解决方案都不适合我。主要的解决方案是存储我已经做过的结果。大多数人说我同时运行两个我不理解的查询。我可能不止一次使用下面的函数,但我总是释放并关闭语句,所以不确定为什么会发生这种情况

您很可能会忽略函数的上半部分,它只生成一个字符串来表示类型。这是我制作的完整DB类:

(我编辑了它,因为我最初发布了它,并用self::$db替换了self::$connection)


有关MySQL的文档提出了两种可能性:

  • 您使用了一个结果,并试图在释放最后一个结果之前执行一个新查询
  • 您正在运行两个查询(不一定同时运行),而不在每个查询之间使用或存储结果 代码中的逻辑显示了不释放结果的唯一情况是不需要准备语句。你的问题的答案可能是处理这个特定的结果,并免费或存储它


    我可以从您的代码
    self::$connection
    中看出它是一个静态引用,因此在该范围内执行的任何查询都可能使用相同的连接。如果看不到全班同学,就很难说

    出于对理智的热爱,将您的驱动程序更改为PDO,并将所有这些代码转换为

    public static function query($query, $params = NULL)
    {
        if (!$params) {
            return self::$connection->query($query);
        }
    
        $statement = self::$connection->prepare($query);
        $statement->execute($params);
        return $statement;
    }
    
    像这样使用

    $result = DB::query("SELECT * FROM table_name");
    foreach($result as  $row) {
        // do stuff                             
    }
    

    这可能与您同时使用
    store\u result
    get\u result
    有关吗?@ethrbunny不,我不这么认为。文档中说,您需要先存储它,然后获取结果,然后检索存储的内容。-“调用从准备好的语句查询返回结果集”是的,但除非首先存储它,否则它不会返回任何结果。store_result表示:“对于成功生成结果集的每个查询,必须调用mysqli_stmt_store_result()”和“从准备好的语句传输结果集”。store_result只返回一个布尔值来标记它是否成功,而不是一个结果集。是的,我只使用:self::$connection=mysqli_connect(self::$dbhost,//self::$dbuser,self:$dbpass,self:$dbname)连接到数据库一次;但我认为您只需要连接一次,然后就可以执行多个查询,然后关闭它?正确,您可以使用相同的连接执行多个查询。我有一个理论,你正在做的一个查询可能不是一个预先准备好的语句,因为你在那个时候返回,因此可能会离开一个结果集而不存储或释放它。您使用该连接运行了多少个查询,它们是什么?我在PHP页面中使用了两个查询,并使用$result->free(),这没有什么区别。我还尝试了$result->close()和相同的结果。如果我同时使用这两个选项,我会得到一个错误。无论谁否决了我的答案,请解释原因。我喜欢从错误中学习,这是最好的学习方式之一。不是我,只是为了记录在案。这可能会有所帮助。仍然在学习PHP,所以从来没有研究过PDO,我最好学习它:SExcellent,但是你能解释一下为什么这会解决这个问题,以及他们做错了什么吗?@HenryTK肯定,不可能是mysqli只是为每个人安装了窃听器。我正在像你想象的那样关闭和释放结果,但不知道为什么会发生这种情况。
    public static function query($query, $params = NULL)
    {
        if (!$params) {
            return self::$connection->query($query);
        }
    
        $statement = self::$connection->prepare($query);
        $statement->execute($params);
        return $statement;
    }
    
    $result = DB::query("SELECT * FROM table_name");
    foreach($result as  $row) {
        // do stuff                             
    }