2010-02-01 2 views
2

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

ответ

1

Afaik Невозможно подготовить несколько операторов как один (комбинированный) подготовленный оператор.
Но DELETE syntax позволяет указать несколько таблиц для удаления строк.

$this->pdo->prepare(" 
    DELETE 
    product_dimension_value_ids,product_string_ids 
    FROM 
    product_dimension_value_ids,product_string_ids 
"); 

(теперь это проверено)

+0

Спасибо. Очень жаль, что я не могу объединить SQL-команды вместе, поскольку это ограничит меня другими вещами, но подсказка синтаксиса DELETE помогает. Любая идея, как PDO обрабатывает хранимые процедуры? Не являются ли они, по сути, просто собранными заявлениями? – FlintZA

+0

Нет, похоже, что удаление из синтаксиса нескольких таблиц в конце концов недействительно. – FlintZA

+0

настоящие, следующий попытка. Кажется, работает, на MySQL 5.1.37 – VolkerK

Смежные вопросы