/ 中存储网

使用PHP导入.sql文件到MySQL数据库

2014-07-13 15:57:54 来源:中存储网

前面已经整理了 php备份mysql数据库为.sql格式文件 ,相反的,怎样用PHP把备份好的.sql文件内容导入到MySQL数据库中呢?

先看看生成的.sql文件:
DROP TABLE IF EXISTS jblog_class;   
  
CREATE TABLE `jblog_class` (   `id` int(10) NOT NULL auto_increment,   `classname` varchar(50) collate utf8_unicode_ci default NULL,   `showorder` int(10) default NULL,   `blogcount` int(10) default '0',   PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;   
  
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('1','生活杂谈','0','8');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('2','Web_Design','5','6');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('3','PHP相关','1','31');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('6','通用代码','4','5');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('7','Window技巧','6','5');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('8','文摘收藏','7','11');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('9','相关政策','8','3');   
insert into `jblog_class`(`id`,`classname`,`showorder`,`blogcount`) values('10','船务&物流','9','3');   
  

在备份的时候,我将每条语句单独生成一行,这样就方便进行下面的恢复操作。我想到了下面的思路:

php读入SQL文件成字符串,每行一条语句,然后字符串转换成数组执行每句sql语句。

按照这个思路应该能实现,一步一步来:
$filename=$_GET['filename'];//恢复的源文件   
$msgstr='';   
$handle = @fopen("../bak/".$filename, "r");   
if ($handle) {   
    while (!feof($handle)) {   
        $sqlstr = fgets($handle);   
        if(strlen($sqlstr) >3) {   
            if(! mysql_query($sqlstr))   
                $msgstr.="下面语句执行错误:<br>".$sqlstr."<br>";   
         
     
    fclose($handle);   
    $msgstr.="../bak/".$filename." 导入完成";   
    require_once('showmsg.php');   
    redir("main.php?do=rebak",3000);   
  
else {   
    $msgstr="../bak/".$filename."文件打开失败";   
    require_once('showmsg.php');   
    redir("main.php?do=rebak",3000);   
 

上面代码中:

showmsg.php——显示指定提示信息$msgstr的文件模块

redir("main.php?do=rebak",3000);——页面在3秒钟之后跳转到main.php?do=rebak 地址