您当前的位置:首页 > 网站建设 > php
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

php读取文本数据插入mysql对应的表列中

51自学网 2019-08-06 21:10:17
  php

一个支持大文件导入的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
/**
 * $splitChar 字段分隔符
 * $file 数据文件文件名
 * $table 数据库表名
 * $conn 数据库连接
 * $fields 数据对应的列名
 * $insertType 插入操作类型,包括INSERT,REPLACE
 */
function loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields=array(),$insertType='INSERT'){
  if(empty($fields)) $head = "{$insertType} INTO `{$table}` VALUES('";
  else $head = "{$insertType} INTO `{$table}`(`".implode('`,`',$fields)."`) VALUES('"//数据头
  $end = "')";
  $sqldata = trim(file_get_contents($file));
  if(preg_replace('/\s*/i','',$splitChar) == '') {
    $splitChar = '/(\w+)(\s+)/i';
    $replace = "$1','";
    $specialFunc = 'preg_replace';
  }else {
    $splitChar = $splitChar;
    $replace = "','";
    $specialFunc = 'str_replace';
  }
  //处理数据体,二者顺序不可换,否则空格或Tab分隔符时出错
  $sqldata = preg_replace('/(\s*)(\n+)(\s*)/i','\'),(\'',$sqldata);  //替换换行
  $sqldata = $specialFunc($splitChar,$replace,$sqldata);        //替换分隔符
  $query = $head.$sqldata.$end//数据拼接
  if(mysql_query($query,$conn)) return array(true);
  else {
    return array(false,mysql_error($conn),mysql_errno($conn));
  }
}
 
//调用示例1
require 'db.php';
$splitChar = '|'//竖线
$file = 'sqldata1.txt';
$fields = array('id','parentid','name');
$table = 'cengji';
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
  echo 'Success!<br/>';
}else {
  echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
/*sqlda ta1.txt
1|0|A
2|1|B
3|1|C
4|2|D
 
-- cengji
CREATE TABLE `cengji` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `parentid` int(11) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `parentid_name_unique` (`parentid`,`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1602 DEFAULT CHARSET=utf8
*/
 
//调用示例2
require 'db.php';
$splitChar = ' '//空格
$file = 'sqldata2.txt';
$fields = array('id','make','model','year');
$table = 'cars';
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
  echo 'Success!<br/>';
}else {
  echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
/* sqldata2.txt
11 Aston DB19 2009
12 Aston DB29 2009
13 Aston DB39 2009
 
-- cars
CREATE TABLE `cars` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `make` varchar(16) NOT NULL,
 `model` varchar(16) DEFAULT NULL,
 `year` varchar(16) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
*/
 
//调用示例3
require 'db.php';
$splitChar = '  '//Tab
$file = 'sqldata3.txt';
$fields = array('id','make','model','year');
$table = 'cars';
$insertType = 'REPLACE';
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields,$insertType);
if (array_shift($result)){
  echo 'Success!<br/>';
}else {
  echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
/* sqldata3.txt
11  Aston  DB19  2009
12  Aston  DB29  2009
13  Aston  DB39  2009
*/
 
//调用示例3
require 'db.php';
$splitChar = '  '//Tab
$file = 'sqldata3.txt';
$fields = array('id','value');
$table = 'notExist'//不存在表
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
  echo 'Success!<br/>';
}else {
  echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
 
//附:db.php
/*  //注释这一行可全部释放
?>
<?php
static $connect = null;
static $table = 'jilian';
if(!isset($connect)) {
  $connect = mysql_connect("localhost","root","");
  if(!$connect) {
    $connect = mysql_connect("localhost","Zjmainstay","");
  }
  if(!$connect) {
    die('Can not connect to database.Fatal error handle by /test/db.php');
  }
  mysql_select_db("test",$connect);
  mysql_query("SET NAMES utf8",$connect);
  $conn = &$connect;
  $db = &$connect;
}
?>

//*/
复制代码
-- 数据表结构:

-- 100000_insert,1000000_insert

?
1
2
3
4
5
6
CREATE TABLE `100000_insert` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `parentid` int(11) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

 100000 (10万)行插入:Insert 100000_line_data use 2.5534288883209 seconds

 1000000(100万)行插入:Insert 1000000_line_data use 19.677318811417 seconds

//可能报错:MySQL server has gone away

//解决:修改my.ini/my.cnf   max_allowed_packet=20M


下载地址:
php 判断上传文件类型 $_files[]['type']值大全
php运行出错如何显示具体错误信息
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1