自己写了一个数据库备份和恢复模块,备份的模块没有问题了,能正确输出创建表和插入数据的SQL语句。最终生成的sql文件和phpmyadmin导出的文件差不多一致,仅有编码不同。
(题外话,很奇怪,phpmadmin里看见的数据总是乱码,导出的文件也是,但程序里正确。但无论phpmyadmin里看到的数据库字符集还是程序代码页面、程序的数据库连接都是统一的utf-8编码。所以程序导出的正确编码的sql文件,用phpmyadmin导入后,phpmyadmin里看见是正确了,但程序里显示就又乱码了)但在数据导回上出了大问题,网上查了很多文章没有一个管用。抄来的正则看不懂,preg_match_all("/create table .*(.*).*;/ius",$content,$carr);这样的语句什么效果也没有,正则甚至连注释(/* 和*/之间)都没正确去除!自己又不会正则。我现在的想法就是用最简单的分割每条SQL语句逐条执行的办法导回数据。但问题又来了,不能简单的用;号分割SQL语句,因为数据内容可能也有;号。例如:
CREATE TABLE yc_title (
`ID` int(32) unsigned auto_increment ,
`topic_id` int(16) ,
`title` varchar(64) ,
`title_type` varchar(32) ,
`title_min` int(8) ,
`title_max` int(8) ,
`title_value` varchar(255) ,
`re` varchar(255) ,
`group_id` int(10) unsigned ,
`pic` varchar(128) ,
`title_exp` text ,
`PowerSet` text ,
KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; INSERT INTO yc_title VALUES ( 58 , 23 , '进度' , 'radio' , 0 , 0 , '' , '' , 5 , NULL, '洽谈;签付;加急;验收;终止;完成;结清' , '_Edit_Order' );
输出时每行语句之间都有"\r\n "也就是换行分割,但是导入后用explode(';\r\n',$content)这样的语句也无法正确分割成数组,我该怎么办?
(题外话,很奇怪,phpmadmin里看见的数据总是乱码,导出的文件也是,但程序里正确。但无论phpmyadmin里看到的数据库字符集还是程序代码页面、程序的数据库连接都是统一的utf-8编码。所以程序导出的正确编码的sql文件,用phpmyadmin导入后,phpmyadmin里看见是正确了,但程序里显示就又乱码了)但在数据导回上出了大问题,网上查了很多文章没有一个管用。抄来的正则看不懂,preg_match_all("/create table .*(.*).*;/ius",$content,$carr);这样的语句什么效果也没有,正则甚至连注释(/* 和*/之间)都没正确去除!自己又不会正则。我现在的想法就是用最简单的分割每条SQL语句逐条执行的办法导回数据。但问题又来了,不能简单的用;号分割SQL语句,因为数据内容可能也有;号。例如:
CREATE TABLE yc_title (
`ID` int(32) unsigned auto_increment ,
`topic_id` int(16) ,
`title` varchar(64) ,
`title_type` varchar(32) ,
`title_min` int(8) ,
`title_max` int(8) ,
`title_value` varchar(255) ,
`re` varchar(255) ,
`group_id` int(10) unsigned ,
`pic` varchar(128) ,
`title_exp` text ,
`PowerSet` text ,
KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; INSERT INTO yc_title VALUES ( 58 , 23 , '进度' , 'radio' , 0 , 0 , '' , '' , 5 , NULL, '洽谈;签付;加急;验收;终止;完成;结清' , '_Edit_Order' );
输出时每行语句之间都有"\r\n "也就是换行分割,但是导入后用explode(';\r\n',$content)这样的语句也无法正确分割成数组,我该怎么办?
Group IN (20)
database : yjqcms
datetime : 2013-02-14 16:26:36
-------------------------*/CREATE TABLE yc_admin (
`ID` int(10) unsigned auto_increment ,
`group_id` int(10) unsigned ,
`company` varchar(64) ,
`admin` varchar(32) ,
`pwd` varchar(64) ,
`PowerSet` text ,
`re` text ,
`contact` text ,
`usable` tinyint(1) ,
`creater` varchar(32) ,
KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; CREATE TABLE yc_content (
`ID` int(32) unsigned auto_increment ,
`text_id` varchar(32) ,
`title_id` int(12) ,
`topic_id` int(16) ,
`group_id` int(10) unsigned ,
`expand_id` int(16) ,
`usable` tinyint(1) ,
`content` text ,
`pic` varchar(128) ,
`date` timestamp ,
KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
INSERT INTO yc_content VALUES ( 7965 , '58587527781' , 664 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-19 15:15:21' );
INSERT INTO yc_content VALUES ( 7964 , '58587527781' , 663 , 1012 , 20 , NULL, 1 , '2013|6' , NULL, '2013-01-19 15:15:21' );
INSERT INTO yc_content VALUES ( 8060 , '58594930218' , 686 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-24 15:15:14' );
INSERT INTO yc_content VALUES ( 8111 , '58588634234' , 655 , 1011 , 20 , NULL, 1 , '123123' , NULL, '2013-01-22 14:14:04' );
INSERT INTO yc_content VALUES ( 7963 , '58587527781' , 662 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-19 15:15:21' );
INSERT INTO yc_content VALUES ( 7999 , '58588634234' , 68 , 1011 , 20 , NULL, 1 , '585886342' , NULL, '2013-01-22 14:14:04' );
INSERT INTO yc_content VALUES ( 7962 , '58587527781' , 661 , 1012 , 20 , NULL, 1 , '测试公司' , NULL, '2013-01-19 15:15:21' );
INSERT INTO yc_content VALUES ( 7961 , '58587527781' , 660 , 1012 , 20 , NULL, 1 , '58588634234' , NULL, '2013-01-19 15:15:21' );
INSERT INTO yc_content VALUES ( 8059 , '58594930218' , 685 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-24 15:15:14' );
INSERT INTO yc_content VALUES ( 8058 , '58594930218' , 684 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-24 15:15:14' );
INSERT INTO yc_content VALUES ( 8044 , '58594930218' , 670 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-24 15:15:14' );
INSERT INTO yc_content VALUES ( 8045 , '58594930218' , 671 , 1012 , 20 , NULL, 1 , '0' , NULL, '2013-01-24 15:15:14' );
INSERT INTO yc_content VALUES ( 8046 , '58594930218' , 672 , 1012 , 20 , NULL, 1 , '0' , NULL, '2013-01-24 15:15:14' );
INSERT INTO yc_content VALUES ( 8047 , '58594930218' , 673 , 1012 , 20 , NULL, 1 , '' , NULL, '2013-01-24 15:15:14' );
$noteLengh = strpos($content,'*/') + 2;
$content = substr($content, $noteLengh);
//替换前缀
$content=str_replace("ct_",table_pre,$content);
$arrCont = explode(";\r",$content);
终于搞定了……不会正则真痛苦