Я пытаюсь использовать подготовленный оператор, который удаляет из двух (временных) таблиц:
public function clearTempTables()
{
static $delStmt = null;
if (null == $delStmt)
{
$delStmt = $this->pdo->prepare("DELETE FROM product_string_ids;
DELETE FROM product_dimension_value_ids;");
}
$delStmt->execute();
}
Вызов этой функции завершается успешно, но когда оператор выполняется впоследствии, я получаю следующую ошибку:
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.
Установка PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY при создании моего объекта PDO (как указано в документации и многочисленных веб-примерах), похоже, не имеет никакого эффекта, а вызов $ delStmt-> fetchAll () приводит к «SQLSTATE [HY000]: общая ошибка» , что имеет смысл, поскольку операторы delete не должны возвращать и результаты, которые в любом случае нуждаются в извлечении.
Что я здесь не так делаю? Можно ли даже подготовить несколько операторов SQL в один оператор, как это? С точки зрения производительности это, безусловно, имеет смысл, особенно при большом количестве запросов, которые будут работать с временными таблицами, а затем только возвращать окончательный набор результатов.