php - 是否可以询问 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); // 以防万一