Я получил ошибку: Общая ошибка: 2014 Невозможно выполнить запросы, когда другие небуферизованные запросы активны.Рассмотрите возможность использования PDOStatement :: fetchAll ().В качестве альтернативы, если ваш код работает только с mysql, вы можете включить буферизацию запросов, установив атрибут PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY.Но:
- PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY включено
- Я не использую запрос pdo (), а только exec ().
Я думаю, что есть проблема с "ANALYZE TABLE".Возвращает набор результатов со строкой.Мне не нужна эта информация.Я не могу изменить порядок команд sql, потому что в действительности это разные партии, которые вызываются ночью заданием cron ...
Тестовый код:
pdo()->exec("TRUNCATE TABLE test;");
pdo()->exec("INSERT INTO test SELECT id FROM data");
// pdo()->exec("INSERT INTO test VALUES (1)"); if only VALUES(..) is used no error thrown
pdo()->exec("ANALYZE TABLE test"); // this returns 1 row
pdo()->beginTransaction(); // here comes the exception!
Настройки соединения:
PDO::ATTR_EMULATE_PREPARES => 1
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => 1
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8, lc_time_names = 'de_DE',sql_mode ='STRICT_ALL_TABLES,PIPES_AS_CONCAT', group_concat_max_len=1000000" ;
PDO::MYSQL_ATTR_COMPRESS => 1
Мой фактический обходной путь:
$cmd = pdo()->query("ANALYZE TABLE test");
$cmd->closeCursor();
unset($cmd);
Есть ли неправильная конфигурация или это ошибка в 10.2.22-MariaDB-log или PHP версии 7.2.10