|
|
|
| Подскажите как правильно разбить mysql дамп по запросам.
пробую через explode(';',$dump); по точке с запятой, пробовал \n , \r, \r\n, ; нормально не выходит.
как это правильно делают?
(без phpmyadmin и прочиих субд) | |
|
|
|
|
|
|
|
для: toproot
(19.08.2013 в 17:59)
| | так просто тут не получится, потому что:
1. точка с запятой могут быть внутри строки: 2. Точка с запятой - это разделитель по-умолчанию. Но он может быть изменен строкой, где вместо $$ может быть что угодно, и сразу после этой строки запросы нужно делить уже по $$. Это повсеместно используется, например при записи в дамп триггеров или хранимых процедур.
Следовательно вам нужно последовательно парсить строку с дампом отслеживая несколько параметров, изначально установленные в:
<?php
$delimiter = ';'; // здесь вы храните текущий разделитель
$string_flag = false; // это флаг, показывающий находится ли сейчас курсор внутри строки.
$string_type = ''; // а здесь храните символ, которым была открыта текущая строка, если она открыта
|
А уж как парсить - это как вам нравится... Можно в цикле посимвольно, можно рекурсивно, ища через strpos() который из отслеживаемых символов встречается первым и принимая на основе этого поиска решение, что делать дальше, или еще как-то... | |
|
|
|
|
|
|
|
для: Sfinks
(19.08.2013 в 18:36)
| | да точка с запятой внутри строки, с этим у меня и проблемы. НО впринципе я нашол выход. В моем случае дамп я могу предварительно отредактировать для своего скрипта-установщика, поставлю разделителями свои символы которые не будут входить в строку и по ним разобью. | |
|
|
|
|
|
|
|
для: toproot
(19.08.2013 в 17:59)
| | Загляните в исходник дампера | |
|
|
|