#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. Спасибо. В итоге я обновил все удаленные вставки и обновил запросы с помощью коррелирующих функций, и это устранило мою проблему. Все еще озадачен тем, как это работало в течение полугода.