MODX出现PDO unbuffered queries报错 如何修改相关配置?
MODX PDO未缓冲查询报错配置修改方案
报错原文如下:
Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
配置修改位置
你可以通过两种方式修改PDO查询缓冲配置:
1. 修改全局核心配置文件
打开站点根目录下的core/config/config.inc.php文件,找到$database_options配置数组,在数组内添加如下配置项:
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
修改完成后保存文件,清空MODX全站缓存即可生效,该配置会全局作用于所有MODX自带的数据库连接。
2. 自定义代码中单独设置
如果不想修改全局核心配置,仅需要在特定自定义Snippet、插件的数据库操作中生效,可以在执行查询前手动设置PDO属性:
// 获取当前数据库连接实例并设置缓冲查询属性 $modx->getConnection()->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
注意事项
- 修改配置文件前务必提前备份原文件,避免配置语法错误导致站点无法正常运行
- 建议优先排查导致报错的代码逻辑:检查是否存在查询结果未完全遍历、未主动释放PDOStatement资源的情况,优先使用
fetchAll()获取所有查询结果再处理,从根源解决问题比强制开启缓冲更稳妥 - 该配置仅适用于MySQL数据库,其他数据库类型不支持该属性设置
内容的提问来源于stack exchange,提问作者Niko Suominen
相关产品推荐
相关产品推荐

