|
|
|
| Здравствуйте!
В файле есть дамп базы вида:
DROP TABLE IF EXISTS `users_online`;
CREATE TABLE `users_online` (
`ip` varchar(15) NOT NULL default '',
`time` bigint(20) NOT NULL,
PRIMARY KEY (`ip`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `users_online` VALUES
('127.0.0.1','1209675173');
DROP DATABASE IF EXISTS `forum`;
CREATE DATABASE `forum` /*!40100 DEFAULT CHARACTER SET cp1257 */;
DROP TABLE IF EXISTS `phpbb3_acl_groups`;
CREATE TABLE `phpbb3_acl_groups` (
`group_id` mediumint(8) unsigned NOT NULL default '0',
`forum_id` mediumint(8) unsigned NOT NULL default '0',
`auth_option_id` mediumint(8) unsigned NOT NULL default '0',
`auth_role_id` mediumint(8) unsigned NOT NULL default '0',
`auth_setting` tinyint(2) NOT NULL default '0',
KEY `group_id` (`group_id`),
KEY `auth_opt_id` (`auth_option_id`),
KEY `auth_role_id` (`auth_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
Читаю файл целиком через file_get_contents().
Мне надо поместить каждый отдельный SQL запрос в массив, т.е. 1 запрос = 1 ячейка массива.
Помогите составить регулярное выражение для preg_match(). Спасибо. | |
|
|
|
|
|
|
|
для: AVS
(04.05.2008 в 20:04)
| | Берете зарезервированные слова, с которых может начинаться запрос и вытягиваете все до точки с запятой =) | |
|
|
|
|
|
|
|
для: ddhvvn
(04.05.2008 в 21:23)
| | > Берете зарезервированные слова, с которых может начинаться запрос и вытягиваете все до точки с запятой =)
...
INSERT INTO `tbl` VALUES(NULL, ';');
... | |
|
|
|
|
|
|
|
для: Atheist
(04.05.2008 в 21:44)
| | Вот -вот. На словах легко. А вот на деле прописать намного сложнее. | |
|
|
|
|
|
|
|
для: AVS
(04.05.2008 в 21:48)
| | проще было-бы разбить по пустым строкам
<pre><?php
$txt = "DROP TABLE IF EXISTS `users_online`;
CREATE TABLE `users_online` (
`ip` varchar(15) NOT NULL default '',
`time` bigint(20) NOT NULL,
PRIMARY KEY (`ip`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `users_online` VALUES
('127.0.0.1','1209675173');
DROP DATABASE IF EXISTS `forum`;
CREATE DATABASE `forum` /*!40100 DEFAULT CHARACTER SET cp1257 */;
";
print_r(
$array = preg_split('#(?:\r?\n){2,}#s', $txt, -1, PREG_SPLIT_NO_EMPTY)
);
?></pre>
|
| |
|
|
|
|
|
|
|
для: sil
(04.05.2008 в 21:56)
| | > проще было-бы разбить по пустым строкам
DROP ... и CREATE TABLE ... будут в одном блоке.
P.S.
to AVS
А в дампе в строковых значениях переводы строк прописаны через символы \r\n или могут быть фактически выражены байтами 0x0D 0x0A? | |
|
|
|
|
|
|
|
для: Atheist
(04.05.2008 в 22:02)
| | Строка переводится просто как \n при создании дампа. | |
|
|
|
|
|
|
|
для: Atheist
(04.05.2008 в 22:02)
| | А если каждый запрос будет отделен пустой строкой, то так разбить легче? Я мало работал с регулярными выражениями. | |
|
|
|
|
|
|
|
для: AVS
(04.05.2008 в 22:10)
| | > Строка переводится просто как \n при создании дампа.
Тогда проще так:
<?php
$s = preg_split("/;\s*$/m", $s, -1, PREG_SPLIT_NO_EMPTY);
?>
|
| |
|
|
|
|
|
|
|
для: Atheist
(04.05.2008 в 22:17)
| | А что за модификатор "m"? Для чего он? | |
|
|
|
|