【问题标题】:Is there a way to var_dump currently active unbuffered queries有没有办法 var_dump 当前活动的无缓冲查询
【发布时间】:2023-03-19 22:00:01
【问题描述】:

TL;DR我不是在问如何使错误消失,我不想再次知道我可以使用fetchAll() 和/或打开缓冲查询。


关于这个错误的另一个问题:

SQLSTATE[HY000]:一般错误:2014 无法在其他无缓冲查询处于活动状态时执行查询。

thereare 无数关于此的帖子,它们很棒,但这不是我的兴趣。

我不只是希望错误消失,我想知道是否有办法确定哪些无缓冲查询仍处于活动状态?

由于我只使用 MySQL,而我的应用程序只能使用 MySQL 运行,我当然可以

考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲

但这不是重点。

man page for pdo 似乎没有执行此操作的方法,并且inTransaction() 方法不适用,因为我没有使用事务。

如果有帮助,所有查询都是准备好的语句,只需准备好 sql 就可以极大地帮助我确定哪个查询没有被完全提取。

var_dumping PDO 对象会产生一个不太有用的结果:

object(PDO)#31 (0) { } 

我的梦想是能够使用这样的东西:

var_dump($pdo->showActiveQueries());

这会返回类似的东西

数组(2){ [0]=> string(19) "SELECT foo FROM bar" [1]=> 字符串(21)“从 2bar 中选择 2foo” }

【问题讨论】:

  • 你试过转储语句对象吗?
  • 我不知道是哪一个有问题。或者这不是你的意思?

标签: php mysql pdo


【解决方案1】:

我的理解是,您一次只能执行一个无缓冲查询,所以如果是这种情况,难道不是在您得到错误之前运行的最后一个查询是原因吗?

如果您正在使用某种数据库抽象,您可以只获取最后一个成功查询,这将是导致错误的查询。

您是否尝试过在创建新查询之前关闭上次运行的查询的游标? http://us.php.net/manual/en/pdostatement.closecursor.php

PDOStatement::closeCursor() 释放与服务器的连接,以便可以发出其他 SQL 语句,但使语句处于可以再次执行的状态。

【讨论】:

  • 我担心实际上是在我的数据库抽象层中添加一些日志记录,但一切似乎都指向这一点..
猜你喜欢
  • 1970-01-01
  • 2015-03-28
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
相关资源
最近更新 更多