2016-03-14 4 views
0

Я пишу PHP-приложение, которое должно создавать новые базы данных по мере добавления данных. Я хочу, чтобы простой и простой способ определить, как должны выглядеть созданные базы данных (то есть, какие таблицы они содержат, какие индексы должны содержать эти таблицы ...), и в настоящее время это диаграмма EER в MySql Workbench, которую я затем перестраиваю на сервер. Я не считаю много CREATE-операторов в PHP-коде «приятным и простым». Запущенный некоторым событием в приложении PHP, мне нужно сделать что-то, что создает новую базу данных с указанным именем, которое является копией базы данных шаблонов.MySQL создает базу данных в соответствии с базой шаблонов

Это Сорта дубликат этого вопроса:
MySQL copy/duplicate database
Но ответы на этот вопрос не подходит для меня.
Я не хочу использовать mysqldump, потому что я не могу взять на себя риск выполнения кода оболочки на сервере, который может быть уязвим для ввода кода, поскольку имя создаваемой базы данных должно быть вставлено. Также this.
Я также не хочу разбивать базу данных отдельно с помощью SHOW-операторов и вручную выполнять инструкции CREATE, чтобы сшить новую базу данных, потому что это становится громоздким быстро и может не захватывать все аспекты базы данных шаблона и, следовательно, найти ошибки. Я также не уверен, насколько хорошо этот метод обрабатывает внешние ключи, когда таблица ссылок создается до указанной.

В идеале я хотел бы использовать простой оператор SQL, такой как CREATE DATABASE ? LIKE TemplateDatabase (где? Представляет собой имя базы данных в некотором виде подготовленного оператора). К сожалению, хотя в MySQL нет такой функциональности.
Очевидно, PostgreSQL может сделать что-то подобное просто отлично, но я не хочу мигрировать только из-за одной функции.

Как это можно выполнить при выполнении вышеупомянутых ограничений?

+0

'CREATE DATABASE?' Вы не можете привязывать таблицы/столбцы, период. Используйте список надежных списков. –

+0

@ Fred-ii- Прошу прояснить, что вы имеете в виду под «safelist» –

ответ

0

Если ваш проект является новым, правильно управляя миграциями, вы можете отделить эту часть от схемы таблицы, которая предназначена для данных таблицы. Скопировать базу данных - это просто перезапустить миграцию.

Если ваш проект существует. Вы можете создавать sql-файлы и писать скрипты php для запуска вручную.

+0

Насколько я понимаю, что я должен использовать функцию миграции MySQL? Как я могу инициировать переход с PHP и как именно нужно настроить перенастройку для достижения желаемого эффекта? Я хотел бы избежать использования файлов SQL из-за причин, изложенных в моем вопросе. –

+0

Выполнение этой проблемы должно быть длинной историей. Но вы можете делать с пациентом. Создайте настраиваемый консольный контроллер, запуск миграции может произойти, вызвав 'shell_exec ('ваша команда для запуска')', настроив миграцию, так как ваш желаемый эффект должен быть контролем внутри этого консольного контроллера. – ThangTD

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