Я пытаюсь использовать подготовленное заявление, которое удаляет из двух (временных) таблиц:PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY и несколько ВЕЬЕТЕ в подготовленном заявлении
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();
}
Calling эта функция завершается успешно, но когда оператор выполняется после , я получаю следующее сообщение об ошибке:
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 в один оператор, подобный этому? С точки зрения производительности это, безусловно, имеет смысл, особенно с большим количеством запросов, которые будут работать во временных таблицах, а затем возвращать окончательный набор результатов.
Спасибо. Очень жаль, что я не могу объединить SQL-команды вместе, поскольку это ограничит меня другими вещами, но подсказка синтаксиса DELETE помогает. Любая идея, как PDO обрабатывает хранимые процедуры? Не являются ли они, по сути, просто собранными заявлениями? – FlintZA
Нет, похоже, что удаление из синтаксиса нескольких таблиц в конце концов недействительно. – FlintZA
настоящие, следующий попытка. Кажется, работает, на MySQL 5.1.37 – VolkerK