使用php解析sql文件

时间:2013-04-18 15:28:30

标签: php mysql sql parsing dump

我有一个包含多个查询的超过3GB的sql转储文件。我想使用php将文件解析为查询。

根据网站上用户的推荐,我使用https://code.google.com/p/php-sql-parser/进行解析。问题是只能使用此方法检索第一个查询。

有人有任何建议吗?

转储文件是服务器数据的唯一遗留物。

谢谢!

3 个答案:

答案 0 :(得分:1)

我真的找到了你想要的东西:

SQL Parser: Parse SQL files and extract query statements((通过phpclasses.org))

示例sql文件

#this is a comment :)

select * from table1 where a=1;

--select commented 2 
select * from
    table2
    where a=2;

#inserting values
insert ignore into `versions`(`release`,`revision`,`name`,`lastupdate`) values ( '1','0','sqlparser',now()); 

#creating tables
create table `tests` (
  `id` int(11) unsigned not null auto_increment,
  `name` varchar(80) not null default '',
  primary key (`id`)
) engine=innodb default charset=utf8;

#customs operations
insert into `tests`(`id`,`name`) values ( '1','test ; value'); 
update `test` set `name`='test value update' where `id`='1'; 

输出:

array (
  0 => 'SELECT * FROM table1 WHERE a=1',
  1 => 'SELECT * FROM    table2    where a=2',
  2 => 'INSERT IGNORE INTO `VERSIONS`(`release`,`revision`,`name`,`lastUpdate`) VALUES ( \'1\',\'0\',\'SqlParser\',NOW())',
  3 => 'CREATE TABLE `TESTS` (  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `Name` varchar(80) NOT NULL DEFAULT \'\',  PRIMARY KEY (`Id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8',
  4 => 'INSERT INTO `TESTS`(`Id`,`Name`) VALUES ( \'1\',\'test ; valiue\')',
  5 => 'UPDATE `TEST` SET `Name`=\'test value update\' WHERE `Id`=\'1\'',
)

这个类非常漂亮的东西是这里有许多东西,比如评论,多行和查询,其值包括“;”字符。

答案 1 :(得分:0)

http://pastebin.com/GxBahnyM - 我是从Typo3 CMS获得的。它在Typo3安装扩展时使用

答案 2 :(得分:-1)

是否可以使用“explode(”;“,$ dumpfile)拆分转储文件,然后执行一个循环调用函数进行解析?你也可以使用另一个分隔符进行爆炸。是否有可能是不平衡的报价?

问候

parascus