首页 >数据库 >mysql教程 >为什么 MySQL 返回错误 2014:'当其他未缓冲的查询处于活动状态时无法执行查询”?

为什么 MySQL 返回错误 2014:'当其他未缓冲的查询处于活动状态时无法执行查询”?

Susan Sarandon
Susan Sarandon原创
2024-12-23 15:42:10819浏览

Why Does MySQL Return Error 2014:

MySQL 错误 2014:无法执行查询,而其他未缓冲的查询处于活动状态

MySQL 的客户端协议限制在结果时同时执行多个查询先前查询的内容尚未完全检索。出现此限制是由于某些查询的无缓冲性质,其中行是增量获取的,而不是像缓冲查询中那样立即缓存。

当执行无缓冲查询并在从查询中检索所有行之前尝试执行另一个查询时首先,MySQL 返回错误“当其他未缓冲的查询处于活动状态时,无法执行查询。”

模拟准备语句

PDO::ATTR_EMULATE_PREPARES 指定准备好的语句是模拟还是作为本机 MySQL 准备好的语句执行。如果设置为 false,使用无缓冲的 PHP 查询会触发错误 2014。这是因为 PHP 的内部查询结果缓存机制无法正确处理无缓冲的查询。

解决错误

有几种方法可以解决这个问题错误:

  • 使用缓冲查询:启用 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 会导致查询以缓冲模式执行,从而自动一次获取所有行。但是,如果结果集很大,这可能会占用大量内存。
  • 获取所有行: 在查询上调用 fetchAll() 可确保检索所有行并关闭结果游标,允许后续查询无错误地执行。
  • 关闭游标: 关闭游标closeCursor() 释放与无缓冲查询相关的 MySQL 资源,并允许执行后续查询。但是,这会阻止从未缓冲的查询中获取任何剩余行。

最佳实践

为避免遇到此错误,建议:

  • 对于获取有限数量的无缓冲查询,默认使用缓冲查询或 fetchAll()行数。
  • 如果没有必要,请避免嵌套查询,因为在循环内多次执行内部查询可能会加剧错误。
  • 完成获取数据以释放服务器后关闭游标资源并防止错误发生。
  • 考虑迁移到 mysqlnd 驱动程序,该驱动程序内存效率更高,并且支持模拟准备声明。

以上是为什么 MySQL 返回错误 2014:'当其他未缓冲的查询处于活动状态时无法执行查询”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn