Небуферизованные запросы Laravel являются активной ошибкой

#php #mysql #laravel #mariadb #laravel-query-builder

#php #mysql #laravel #mariadb #laravel-конструктор запросов

Вопрос:

Я начал видеть эту ошибку на днях в моем приложении 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() ожидает получить набор результатов и, вероятно, зависает в ожидании одного. Вместо этого, согласно документации, вы должны использовать DB::insert() для выполнения INSERT инструкции SQL.

Комментарии:

1. Спасибо. В итоге я обновил все удаленные вставки и обновил запросы с помощью коррелирующих функций, и это устранило мою проблему. Все еще озадачен тем, как это работало в течение полугода.