[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQL Dump
yurij__
Давно хотел узнать, может кто подскажет smile.gif
Есть у меня дамп базы данных сделанный, например, через phpmyadmin. Имеет самый классический вид типа:


DROP TABLE IF EXISTS tbl_name;
CREATE TABLE tbl_name(

)...;

INSERT INTO tbl_name (...) VALUES (...);

и т.д.

И теперь вопрос: почему этот код нельзя просто передать функции mysql_query? На сколько я понимаю, она не умеет обрабатывать несколько запросов разделенных точкой с запятой.
Но может все-таки есть какой-то простой способ без велосипеда загрузить этот дамп средствами php?



Спустя 6 минут, 29 секунд (27.07.2010 - 22:51) Ice написал(а):
пробуйте несколько раз вызывать mysql_query

Спустя 11 минут, 7 секунд (27.07.2010 - 23:03) yurij__ написал(а):
поскольку все SQL инструкции находятся в одном файле, то мне придется его парсить, разбивая на куски (то есть отдельные запросы), а это как бы не очень охота. Правда, интуиция подсказывает, что лучше способа не найдется... Но хочется верить что я ошибаюсь smile.gif

Спустя 2 минуты, 56 секунд (27.07.2010 - 23:05) sergeiss написал(а):
Если у тебя этот дамп имеет разумные пределы (т.е. ты не дойдешь до лимита использования памяти), то всё "парсенье" уберется в 1 строку smile.gif. Плюс потом сделать цикл выполнения скриптов.

PS. Вот она, эта одна строка:
$sqls=explode( ';', file_get_contents('имя_файла') );

Спустя 1 минута, 8 секунд (27.07.2010 - 23:07) dr_Lev написал(а):
mysqli может помочь решить твою проблему... а именно mysqli_multi_query

Спустя 1 минута, 43 секунды (27.07.2010 - 23:08) yurij__ написал(а):
Цитата
Если у тебя этот дамп имеет разумные пределы (т.е. ты не дойдешь до лимита использования памяти), то всё "парсенье" уберется в 1 строку . Плюс потом сделать цикл выполнения скриптов.


Вероятно я туплю, но как сделать парсенье в одну строку?

sergeiss, если бы предложенный Вами парсер был так хорош, не возникло бы сабжа.. А что будет если в тексте дампа встретится точка с запятой? она как бы может встретиться где-угодно, и вычислять все возможные варианты - не лучшее времяпровождение smile.gif

Спустя 1 минута, 17 секунд (27.07.2010 - 23:10) sergeiss написал(а):
Цитата (yurij__ @ 28.07.2010 - 00:08)
Вероятно я туплю, но как сделать парсенье в одну строку?

Я чуть выше сделал уже приписку.

Спустя 2 минуты, 54 секунды (27.07.2010 - 23:12) yurij__ написал(а):
Цитата
Я чуть выше сделал уже приписку.


и я чуть выше сделал приписку smile.gif

Спустя 2 минуты, 50 секунд (27.07.2010 - 23:15) yurij__ написал(а):
dr_Lev, а Ваш способ всем хорош, жалко неприменим к mysql. А сильно ли отличаются mysql и mysqli?

Спустя 49 минут, 53 секунды (28.07.2010 - 00:05) dr_Lev написал(а):
В mysqli есть практически все, что есть в mysql, и почти все фонкции/методы называются и вызываются также, только mysqli дает больше возможностей, чем mysql

Спустя 36 секунд (28.07.2010 - 00:06) SlavaFr написал(а):
в техте может конечно находится ";" но ";\r\n" находится не будет.

читаем в цикле построчно sql
IF в начале строки "--" то пропускаем.
ELSE добавляем ее в переменную $буфер
IF в конце буфера ";\r\n" то делаем mysql_query и опусташаем $буфер



Алтернатива: Даеш денег и тебе дамп обычным способом через консоль загоняют.

Спустя 13 минут, 11 секунд (28.07.2010 - 00:19) yurij__ написал(а):
SlavaFr, пожалуй так и сделаю! Ничего другого, вероятно, для mysql не придумать.

Спустя 17 минут, 20 секунд (28.07.2010 - 00:36) SlavaFr написал(а):
Цитата (yurij__ @ 27.07.2010 - 21:19)
SlavaFr, пожалуй так и сделаю! Ничего другого, вероятно, для mysql не придумать.

да дело не в mysql, а в том, что у тебя прав нет через терминал на сервере работать.

Спустя 5 минут, 52 секунды (28.07.2010 - 00:42) yurij__ написал(а):
Да, да. Я имел ввиду для mysql средствами php.

Спустя 6 часов, 16 минут, 52 секунды (28.07.2010 - 06:59) sergeiss написал(а):
Еще вариант.
Насколько я вижу, у тебя по окончании запроса стоит точка с запятой и далее переход на новую строку. Поэтому в том парсере, что я указал, в качестве разделителя достаточно поставить ';\n', т.е. точку с запятой и следующий за ней знак "новая строка". Это-то вряд ли будет внутри запроса.
Если у тебя есть пробелы после точки с запятой перед "новой строкой"... Ну обработай, чтобы этого не было smile.gif Не так это и сложно. И это будет единственная "неудобная" комбинация, от которой надо избавиться.

$sqls=explode( ";\n", file_get_contents('имя_файла') );


PS. Внес поправку!!!
Строку ";\n" надо писать именно в двойных кавычках, иначе не сработает, как надо. А я сначала поторопился и написал в одинарных.

Спустя 3 часа, 53 минуты, 46 секунд (28.07.2010 - 10:53) Wird_34 написал(а):
А если там win-формат новой строки т.е. "\r\n"?

Спустя 2 часа, 24 минуты, 16 секунд (28.07.2010 - 13:17) SlavaFr написал(а):
тогда регулярное выражение

Спустя 2 часа, 38 минут, 58 секунд (28.07.2010 - 15:56) sergeiss написал(а):
Цитата (Wird_34 @ 28.07.2010 - 11:53)
А если там win-формат новой строки т.е. "\r\n"?

А кто мешает сначала загрузить файл в строку, проверить, какие комбинации "новой строки" имеются, а затем делить на элементы массива? Элементарно же это всё!!! И я думаю, что автор темы с этим справится.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.