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

后端开发   发布日期:2023年05月18日   浏览次数:618

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

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

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

  1. function split_sql($sql) {//处理.sql文件中分行的sql
  2. $sql = trim($sql);
  3. $sql = str_replace("\r\n", "\n", $sql);
  4. $buffer = array();
  5. $ret = array();
  6. $in_string = false;
  7. for ($i = 0; $i < strlen($sql) - 1; $i++) {
  8. if ($sql[$i] == ";" && !$in_string) {
  9. $ret[] = substr($sql, 0, $i);
  10. $sql = substr($sql, $i + 1);
  11. $i = 0;
  12. }
  13. if ($in_string && ($sql[$i] == $in_string) && $buffer[1] != "\\") {
  14. $in_string = false;
  15. }
  16. elseif(!$in_string && ($sql[$i] == '"' || $sql[$i] == "'") && (!isset($buffer[0]) || $buffer[0] != "\\")) {
  17. $in_string = $sql[$i];
  18. }
  19. if (isset($buffer[1])) {
  20. $buffer[0] = $buffer[1];
  21. }
  22. $buffer[1] = $sql[$i];
  23. }
  24. if (!empty($sql)) {
  25. $ret[] = $sql;
  26. }
  27. return ($ret);
  28. }
  29.  
  30. $sql_file = "bak/sql.sql"; //导出的数据库脚本文件
  31. $mysqli - >query("SET NAMES utf8");//设置编码格式
  32. $query = fread(fopen($sql_file, "r"), filesize($sql_file));
  33. $sqls_array = split_sql($query);
  34. for ($i = 0; $i < count($sqls_array); $i++) {
  35. $sqls_array[$i] = trim($sqls_array[$i]);
  36. if (!empty($sqls_array[$i]) && $sqls_array[$i] != "#") {
  37. $mysqli - >query($sqls_array[$i]); //逐行执行sql
  38. }
  39. }
  40.  
  41. echo "数据库更新完成!".date("Y-m-d H:i:s");


以上就是PHP导入phpmyadmin或navicat导出的.sql文件里的数据的详细内容,更多关于PHP导入phpmyadmin或navicat导出的.sql文件里的数据的资料请关注九品源码其它相关文章!