@Architecktor133

Как откатить транзакцию при создании таблиц?

Есть алгоритм создания БД:
1) Проверяется наличие БД (если нет - создаётся)
2) Начинается транзакция
3) В цикле проверяется наличие таблиц, если нет таблицы - создаётся. Если не удалось создать, откатывается транзакция

Проверяю откат транзакции, таблицы не удаляются. Может я неправильно использую или понимаю транзакцию?

try {
			# Создание объекта BD без имени БД для проверки её существования
			$createdDB = false;
			$params = $conParams;
			unset($params['db']);
			$db = new DB($params);

			# Проверка существования БД
			if(!$db->DBExists($conParams['db'])) {
				if(!$db->createDB($conParams['db'])) {
					throw new Exception("Ошибка при создании БД");
				}

				$createdDB = true;
			}

			# Создание объекта со всеми параметрами
			$db = new DB($conParams);

			# Начало транзакции
			echo '--------------Транзакция начата--------------<br>';
			var_dump($db->beginTransaction());

			if(count($tables)) {
				# Проверка существования каждой таблицы, если БД не была создана только что
				foreach($tables as $name => $fields) {
					if(!$createdDB) {
						if($db->tableExists($name)) {
							continue;
						}
					}

					if($db->createTable($name, $fields)) {
						echo 'Создана таблица: ' . $name . '<br>';
					}
				}
			}

                        # Проверка транзакции
			var_dump($db->inTransaction());

			# Откат транзакции
			echo '--------------Откат транзакции--------------<br>';
			var_dump($db->rollBack());
		} catch(Exception $e) {
			$this->getResult()->addError($e->getMessage());
		}
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы