Listening to the Words

ThinkPHP SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries

最近做项目时,部署到外网后突然产生了一个错误:错误如图:

《ThinkPHP SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries》

从来没有见过这个MYSQL爆出的错误,翻译出来的意思就是:

其他为缓冲的查询在执行时,不能够执行新的查询,因为这种操作mysql不支持,你可以通过设置PDO::MYSQL_ATTR_USER_BUFFERRED_QUERY属性使查询支持缓冲模式.

于是就去官网查到时什么是PDO::MYSQL_ATTR_USER_BUFFERRED_QUERY

这是官方给出的解释:

《ThinkPHP SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries》

缓冲和未缓冲查询

查询默认使用的是缓冲模式,这意味着查询结果会立即从mysql转移到php并且存储在内存php进程中,它允许像是计算结果行数和移动当前结果集指针等操作,同样允许在同一个连接下处理结果集时做进一步查询,缓冲模式的缺点是占用大量的存储空间,内存会被一直占用,直到所有结果集的引用被显性地释放,请求结束时,这个过程自动完成.

解决的方案是:在数据库配置文件中添加配置

//database.php
 // 数据库连接参数
    'params'         => [
        'PDO::ATTR_EMULATE_PREPARES' => true,
    ],
点赞