#php #mysql #sql #codeigniter
#php #mysql #sql #codeigniter
Вопрос:
Каков наилучший способ взять SQL-файл, содержащий инструкции по созданию схемы и таблицы, и использовать его для создания новых баз данных из CodeIgniter? Я хочу иметь возможность использовать этот файл .sql в качестве схемы для нескольких баз данных с одинаковой схемой, но которые могут быть созданы в любое время.
Я полагаю, мне просто нужно иметь возможность взять этот файл, извлечь содержимое и передать его в запрос базы данных. Есть ли лучший способ сделать это?
Мне также нужно иметь возможность вводить пользовательское имя базы данных в инструкции перед отправкой запроса. Как бы я это сделал? Просто введите ключевое слово-заполнитель и замените preg именем базы данных?
Просто чтобы убедиться, что все базы данных поддерживаются синхронно, я подумал, что, возможно, эту схему схемы элементов следует добавить в CodeIgniter в качестве модуля. Таким образом, если мне нужно изменить схему, я могу загрузить новую версию модуля с обновленным файлом .sql и выполнить необходимые миграции во всех базах данных. Звучит разумно? Если да, то как мне это сделать?
Ответ №1:
Я уже делал это (запускал файл .sql) раньше, и я использовал это;
$sql = read_file('path/to/file.sql');
$final = '';
foreach(explode("n", $sql) as $line)
{
if ( isset($line[0]) amp;amp; $line[0] != '#' )
{
$final .= $line . "n";
}
}
foreach (explode(";n", final) as $sql)
{
if ($sql)
{
$this->db->query($sql);
}
}
Комментарии:
1. Выглядит хорошо, насколько чтение файла идет. Я думаю, если мне нужно ввести имя базы данных, я могу просто сделать str_replace в каждой строке, верно? Как насчет изменений базы данных? Я полагаю, мне нужно было бы просто запустить инструкции, которые изменяют таблицы, а затем загрузить новый файл master .sql для последующих баз данных?
2. Может быть, класс миграции CI может вам помочь? ellislab.com/codeigniter/user-guide/libraries/migration.html
3. Да, миграции будут работать для этого, я полагаю, я просто всегда пытаюсь снизить риск, не поддерживая две вещи (миграции и обновленный файл master .sql). Я стараюсь использовать классы CI как можно чаще, но для создания базы данных класс DB Forge просто казался немного ограниченным (из того, что я мог видеть), и гораздо удобнее просто использовать .sql, экспортированный из Workbench.