Есть алгоритм создания БД:
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());
}