Laravel 无缓冲查询是活动错误

Posted

技术标签:

【中文标题】Laravel 无缓冲查询是活动错误【英文标题】:Laravel unbuffered queries are active error 【发布时间】:2021-03-17 15:02:32 【问题描述】:

前几天我开始在我的 Laravel 应用程序中看到这个错误。奇怪的是我没有推送任何代码更改,它开始给出这个错误。

SQLSTATE[HY000]: General error: 2014 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.

这是它抱怨的查询之一:

public function addAgents($year)

    $result = DB::select("
        INSERT INTO agents
        (
            first_name,
            last_name,
            name
        )
        SELECT
        t.first_name,
        t.last_name,
        t.name
        FROM
        (
            SELECT DISTINCT
            first_name,
            last_name,
            CONCAT(first_name, ' ', last_name) AS name
            FROM data_mart d
            AND program_year = :year
        ) AS t
        ON DUPLICATE KEY UPDATE
        first_name = t.first_name,
        last_name = t.last_name,
        name = t.name,
    ", [':year' => $year]);

我正在使用:MariaDB 10.2.36

有人对如何解决这个问题有任何建议吗?

【问题讨论】:

【参考方案1】:

DB::select() 期望得到一个结果集,并且可能会挂起等待一个结果集。相反,according to documentation,您应该使用DB::insert() 来执行INSERT SQL 语句。

【讨论】:

谢谢。我最终更新了所有删除的插入,并使用相关函数更新了查询,这解决了我的问题。还是很困惑这半年是怎么做到的。

以上是关于Laravel 无缓冲查询是活动错误的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询

查询的活动结果不包含任何字段 laravel

Laravel 3 - 查询同一天的开始和结束日期的最佳方法是啥

Laravel 多对多关系查询

Laravel“页面由于不活动而过期”

PHP Laravel:Ajax 无法检索数据(无属性)