необходимо импортировать дамп MySQL без system(); как лучше сделать?

jeno

Новичок
необходимо импортировать дамп MySQL без system(); как лучше сделать?

Добрый вечер.

предварительно пробил по поиску, похожие вопросы были, но варианты решения мне не подходят..
например что-то вроде system("mysql < dump_file.sql"); я к сожалению использовать не могу..

есть дамп базы в отдельном файле. Что-то вроде:
Код:
-- some comments

CREATE TABLE `sometable`;

-- some comments

INSERT INTO `sometable` VALUES 
(1,2,3),
(1,2,3),
(1,2,3),
(1,2,3),
(1,2,3),
(1,2,3),
(1,2,3),
(1,2,3);
нужно средствами РНР, без system и левых утилит, импортировать этот дамп (в][общем, выполнить все запросы которые в этом файле)

в первую очередь, приходят в голову регулярные выражения...
те.открываем .sql файл, ищем в нем все запросы например с помощью preg_match_all и выполняем (сначала все начинающиеся на CREATE а потом уже INSERT)
но тут огромный минус в том что дамп может быть не совсем стандартный... (а вдруг?! если кусок БД исчезнет, будет очень неприятно)

в][общем, может есть какие-то другие варианты решения? (например, что-то вроде функции mysql_query(); только выполняющей сразу много запросов...хотелось бы что-то простое и универсальное...регулярным выражениям и дампам которые им придется парсить не доверяю )

пс.эту функцию импорта нужно внедрить в готовую систему, и обойтись средствами phpmyadmin и т.п. не выйдет (система полностью автоматическая)
 

jeno

Новичок
это моя система...

а тут платные советы?)

пс.я б понял, если б в наглую просил написать код...но я просто прошу совета/направления)
 

С.

Продвинутый новичок
в первую очередь, приходят в голову регулярные выражения...
те.открываем .sql файл, ищем в нем все запросы например с помощью preg_match_all и выполняем (сначала все начинающиеся на CREATE а потом уже INSERT)
Ничего там искать не надо. Просто тупо исполнять один запрос за другим.
 

jeno

Новичок
те.открывать файл, и читать строку за строкой (встречается INSERT начинаем записывать запрос, встречается другой INSERT или конец файла - выполняем) ?
 

jeno

Новичок
Ф_А_Н_А_Т
спасибо...буду колупать=)

пс.пред. сообщение написал перед тем как увидел твое)

---

на счет phpmyadmin..первое что я попробовал сделать, это выдрать функцию импорта из него...но там столько левых функций и т.д...я подумал что все может быть намного проще =)
 

fixxxer

К.О.
Партнер клуба
да все просто
псеводкод такой
Код:
Tables = fetch_rows(show tables)
for(Table in Tables) 
print fetch_col(show create table Table);
X = 0;
while N_rows = fetch_rows(select * from Table limit X offset N); do
   print_multi_insert_for(N_rows);
   X += N;
done
endfor
 

mustafa

Новичок
>>mysqli_multi_query()
она не спасет если в самом запросе будет присутствовать точка с запятой
пример:
INSERT INTO sometable (`type_name`, `group_name`, `label`, `settings`, `weight`) VALUES
.....
('node_type_bookmark', 'group_links', 'Links', 'a:2:{s:4:"form";a:2:{s:5:"style";s:20:"fieldset_collapsible";s:11:"description";s:0:"";}s:7:"display";a:4:{s:11:"description";s:0:"";s:6:"teaser";s:8:"fieldset";s:4:"full";s:8:"fieldset";s:5:"label";s:5:"above";}}', 3);
.....
Я правда не проверял, но думаю не пропустит
 

fixxxer

К.О.
Партнер клуба
Ну наверное не дураки писали и там что-то чуть чуть умнее, чем explode(";")
 
Сверху