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