MySQL разделить строку нескольких запросов с PHP - PullRequest
0 голосов
/ 27 марта 2009

Я хочу создать функцию восстановления базы данных, которая будет анализировать дамп, созданный с помощью phpMyAdmin, и выполнит все запросы.

У меня уже есть класс MySQL, который выполняет запрос, но он знает только, как выполнить один запрос. Я ищу способ разбить содержимое файла на отдельные запросы.

Я пытался поиграть с preg_split ... но мне не удалось заставить его работать.

$queries = preg_split('/[(.+);\s*\n/', $content, -1, PREG_SPLIT_NO_EMPTY);

Я не очень хорош с регулярными выражениями. Есть ли способ, которым я могу достичь своей цели?

Ответы [ 3 ]

5 голосов
/ 27 марта 2009

не пытайтесь анализировать sql с регулярными выражениями. что если внутри строки sql есть ;?

Я бы попробовал http://pear.php.net/package/SQL_Parser, или любой из других парсеров php mysql . см. также PHP анализатор MySQL SQL (INSERT и UPDATE) здесь, на SO.

0 голосов
/ 11 января 2012

Я думаю, что разделение в комментариях выше приведет к появлению плохих строк, когда у вас есть хранимые процедуры, функции или триггеры в $ content.

0 голосов
/ 27 марта 2009

В конце концов мне удалось найти правильное регулярное выражение:

$queries = preg_split('/[.+;][\s]*\n/', $content, -1, PREG_SPLIT_NO_EMPTY);

разделяет запрос после; знак и не разрывается, даже если запрос распространяется на несколько строк или запрос содержит; так как он ищет его в конце строки.

...