当尝试执行查询而另一个无缓冲查询仍在运行时,会发生 MySQL 错误 2014积极的。当使用 PDO::ATTR_EMULATE_PREPARES 设置为 false 的预准备语句时,可能会发生这种情况。
当 PDO::ATTR_EMULATE_PREPARES 为 true 时,PDO 将通过将预准备语句转换为普通 SQL 查询来模拟预准备语句。这意味着服务器将为每行数据执行一次查询,允许并发执行无缓冲查询。
但是,当 PDO::ATTR_EMULATE_PREPARES 为 false 时,PDO 会将准备好的语句发送到服务器并保持光标打开。这可以防止在游标关闭之前执行其他查询。
此错误有多种解决方案:
在提供的代码片段中,存在 $stmt2 查询在循环内执行多次的问题。这是不必要的,可以移到循环之外以提高性能。
还建议使用命名参数(PDO::bindParam())而不是位置参数(带数组的 PDO::execute())对于准备好的陈述。这使得代码更具可读性并降低了 SQL 注入的风险。
MySQL 错误 2014 可能是由于未正确处理无缓冲查询而导致的。通过使用缓冲查询、调用 fetchAll() 或关闭游标,可以避免此错误。
以上是为什么我会收到 MySQL 错误 2014:'当其他未缓冲的查询处于活动状态时无法执行查询”?的详细内容。更多信息请关注PHP中文网其他相关文章!