Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разбить дамп по запросам
 
 автор: toproot   (19.08.2013 в 17:59)   письмо автору
 
 

Подскажите как правильно разбить mysql дамп по запросам.
пробую через explode(';',$dump); по точке с запятой, пробовал \n , \r, \r\n, ; нормально не выходит.
как это правильно делают?

(без phpmyadmin и прочиих субд)

  Ответить  
 
 автор: Sfinks   (19.08.2013 в 18:36)   письмо автору
 
   для: toproot   (19.08.2013 в 17:59)
 

так просто тут не получится, потому что:
1. точка с запятой могут быть внутри строки:
.... WHERE title = ';';
2. Точка с запятой - это разделитель по-умолчанию. Но он может быть изменен строкой
DELIMITER $$
, где вместо $$ может быть что угодно, и сразу после этой строки запросы нужно делить уже по $$. Это повсеместно используется, например при записи в дамп триггеров или хранимых процедур.

Следовательно вам нужно последовательно парсить строку с дампом отслеживая несколько параметров, изначально установленные в:
<?php
  $delimiter 
';';     // здесь вы храните текущий разделитель
  
$string_flag false// это флаг, показывающий находится ли сейчас курсор внутри строки.
  
$string_type '';    // а здесь храните символ, которым была открыта текущая строка, если она открыта

А уж как парсить - это как вам нравится... Можно в цикле посимвольно, можно рекурсивно, ища через strpos() который из отслеживаемых символов встречается первым и принимая на основе этого поиска решение, что делать дальше, или еще как-то...

  Ответить  
 
 автор: toproot   (19.08.2013 в 18:50)   письмо автору
 
   для: Sfinks   (19.08.2013 в 18:36)
 

да точка с запятой внутри строки, с этим у меня и проблемы. НО впринципе я нашол выход. В моем случае дамп я могу предварительно отредактировать для своего скрипта-установщика, поставлю разделителями свои символы которые не будут входить в строку и по ним разобью.

  Ответить  
 
 автор: mihdan   (02.09.2013 в 22:45)   письмо автору
 
   для: toproot   (19.08.2013 в 17:59)
 

Загляните в исходник дампера

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования