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