2011-01-23 3 views
0

Я написал утилиту для обновления БД из списка пронумерованных файлов обновления .sql. Утилита хранит внутри БД индекс lastAppliedUpdate. При запуске он считывает lastAppliedUpdate и применяет к db, по порядку, все обновления, относящиеся к lastAppliedUpdate, а затем обновляет значение lastAppliedUpdate в db. В принципе простой.Выполнение нескольких обновлений db один за другим (общая ошибка 2014)

Вопрос: утилита успешно применяет необходимые обновления, но при попытке сохранить значение lastAppliedUpdate, возникает ошибка:

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.

Любые идеи, что это значит, и как может быть решены?

Ниже приведена суть кода. Это PHP-код в рамках Yii.

foreach ($numericlyIndexedUpdateFiles as $index => $filename) 
{ 
    $command = new CDbCommand (Yii::app()->db, file_get_contents ($filename)); 
    $command->execute(); 
} 
$metaData = MDbMetaData::model()->find(); 
$metaData->lastAppliedUpdate = $index; 
if (!$metaData->save()) throw new CException ("Failed to save metadata lastAppliedUpdate."); 
// on this line, instead of throwing the exception that my code throws, if any, 
// I receive the described above error 

MySQL версия: 5.1.50, PHP версия: 5.3

редактирования: приведенный выше код выполняется внутри транзакции, и я хочу его.

ответ

0

Общий ответ в том, что вы должны получить все результаты из предыдущий запрос перед запуском другого или выяснить, как отключить буферизованные запросы на уровне абстракции базы данных.

Поскольку я не знаю синтаксиса, чтобы дать вам эти таинственные классы, которые вы используете (а не человек Yii), легкое решение заключается в том, чтобы закрыть соединение и повторно открыть его между этими двумя действиями.

+0

Спасибо, я делаю это внутри транзакции и хочу, чтобы это было сделано таким образом. Учитывается ли ваш ответ с учетом этого? – shealtiel

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