首页 > 解决方案 > 是否可以询问 PDO 以确定查询当前是否处于活动状态?

问题描述

是否可以询问 PDO 以了解查询当前是否处于活动状态?

答案 =

尝试setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY , true);以防万一它适用于您的情况

->closeCursor() 在可疑动词之后应该会有所帮助,但您必须围绕用法编写代码,例如

return $pdoStatement->rowCount()===1;

可疑动词

->quote() Slight possibility if connection used like mysql_real_escape_string()
->query() High risk - use ->closeCursor()
->fetch() Highest risk - use ->closeCursor()
->fetchAll() should be safe but errors reported to Stack Overflow
->rowCount() **THIS** was causing my problem


要组织 bug 搜寻,请在 FATAL ERROR 之前 使用 debug_backtrace() On line


使用该列表回溯执行在每个可疑动词行保存
测试之前添加 ->closeCursor()
如果仍然得到 FATAL ERROR 一次修复下一个动词

发现错误行后,您可以删除 debug_backtrace()

如果这不起作用,我完全没有想法,因为失败会在执行路径的某个地方创建。


PHP PDO MySQL似乎忽略了这些困难

错误 #70066 意外“在其他无缓冲查询时无法执行查询”
状态 = OPEN
Url = https://bugs.php.net/bug.php?id=70066
解决方法 = 解决方案是使用 exec() 而不是 query() ,但我认为这是错误,因为没有其他活动查询。

错误 #71145 init 命令中的多个语句触发无缓冲查询错误
状态 = OPEN
Url = https://bugs.php.net/bug.php?id=71145
解决方法 = SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci, SESSION sql_mode=traditional;

错误 #74584 有关意外触发的活动无缓冲查询的错误
状态 = OPEN
Url = https://bugs.php.net/bug.php?id=74584
描述
在下面的测试用例中引发异常。
- 模拟准备必须关闭
- “LOCK TABLE” 触发错误,例如“set @foo='bar'” 不
我看不出在这种情况下发生错误的原因。


重要的

生成的错误是 FATAL ERROR

这意味着程序 ->

...停止死亡

...它不能用 try(){}catch($e){} 块处理

这将提供信息以发现如何修复错误

“一般错误:2014 无法在其他无缓冲查询处于活动状态时执行查询”

希望这会短路查看所有代码库以找到错误。

目前我正在尝试解决由

$statement = pdo->prepare( $sql );

这意味着整个代码库都是可疑的

为什么这与所有其他请求不同?

注意:prepare() 阶段产生的错误

不是查询()

不 fetch() 和

不是 fetchAll()

NOT ->bind(':name' , $value , PDO::PARAM_STR)

这意味着当我收到该消息时,我不是在“执行查询”。

我问是因为 Stack Overflow 有很多关于错误的请求,但没有相关的解决方案

注意:不工作

$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); // 以防万一

标签: phppdo

解决方案


推荐阅读