欢迎您来到,李雷博客 | PHP博客        登录  |  注册

PHP导入phpmyadmin或navicat导出的.sql文件里的数据

更新:2022-11-08 14:43:26
人气:103
来源:本站原创
A+

实现PHP导入由phpmyadmin或navicat导出的MYSQL备份文件.sql数据库文件里的数据,直接获取并导入会报错,因为里面的格式都以下这种断行的语句,不能识别需要处理一下格式。

DROP TABLE IF EXISTS `dangxiao_zichan_chushihua`;
CREATE TABLE `dangxiao_zichan_chushihua` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL,
  `dh` varchar(100) NOT NULL,
  `indate` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3;
INSERT INTO `dangxiao_quanxian_title` VALUES (53, '4', '资产初始化管理', 200);
INSERT INTO `dangxiao_quanxian_info` VALUES ('1243', '53', '创建初始化任务', 'ZC-CHUSH-001', '1500');
INSERT INTO `dangxiao_quanxian_info` VALUES ('1244', '53', '初始化任务管理', 'ZC-CHUSH-002', '1510');

下面就给出具体导入.sql数据的代码,里面$mysqli - >query()之前需要连接数据库,用自己的连接方法就行了,这个不用多说。

function split_sql($sql) {//处理.sql文件中分行的sql
    $sql = trim($sql);
    $sql = str_replace("\r\n", "\n", $sql);
    $buffer = array();
    $ret = array();
    $in_string = false;
    for ($i = 0; $i < strlen($sql) - 1; $i++) {
        if ($sql[$i] == ";" && !$in_string) {
            $ret[] = substr($sql, 0, $i);
            $sql = substr($sql, $i + 1);
            $i = 0;
        }
        if ($in_string && ($sql[$i] == $in_string) && $buffer[1] != "\\") {
            $in_string = false;
        }
        elseif(!$in_string && ($sql[$i] == '"' || $sql[$i] == "'") && (!isset($buffer[0]) || $buffer[0] != "\\")) {
            $in_string = $sql[$i];
        }
        if (isset($buffer[1])) {
            $buffer[0] = $buffer[1];
        }
        $buffer[1] = $sql[$i];
    }
    if (!empty($sql)) {
        $ret[] = $sql;
    }
    return ($ret);
}

$sql_file = "bak/sql.sql"; //导出的数据库脚本文件
$mysqli - >query("SET NAMES utf8");//设置编码格式
$query = fread(fopen($sql_file, "r"), filesize($sql_file));
$sqls_array = split_sql($query);
for ($i = 0; $i < count($sqls_array); $i++) {
    $sqls_array[$i] = trim($sqls_array[$i]);
    if (!empty($sqls_array[$i]) && $sqls_array[$i] != "#") {
        $mysqli - >query($sqls_array[$i]); //逐行执行sql
    }
}

echo "数据库更新完成!".date("Y-m-d H:i:s");


推荐的文章
# 发表我的评论
  /     /  
# 最近评论
暂时还没有评论,要不要说点什么?
  Ads by Google
  联系博主
Hello,本博客系统采用PHP和MySql开发,程序开发完全是因为个人爱好,是自己纯手写PHP源代码,未采用任何PHP框架!
QQ:858353007   微信号:lileihot123
网站地图
会员服务
关于我们
QQ:858353007
 
广告服务
加我微信
移动端访问
 
 
Copyright © 2014- 2023 www.mdaima.com All Rights Reserved.
李雷博客,专注PHP经验、PHP教程及PHP源代码开源下载分享的PHP博客!   ICP备案号:京ICP备10202169号-4