php读取txt文件并将数据插入到数据库


Posted in PHP onFebruary 23, 2016

今天测试一个功能,需要往数据库中插入一些原始数据,PM给了一个txt文件,如何快速的将这个txt文件的内容拆分为所要的数组,然后再插入到数据库中?

serial_number.txt的示例内容:

serial_number.txt:

DM00001A11 0116,
SN00002A11 0116,
AB00003A11 0116,
PV00004A11 0116,
OC00005A11 0116,
IX00006A11 0116,

创建数据表:

create table serial_number(
id int primary key auto_increment not null,
serial_number varchar(50) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

php代码如下:

$conn = mysql_connect('127.0.0.1','root','') or die("Invalid query: " . mysql_error());
mysql_select_db('test', $conn) or die("Invalid query: " . mysql_error());

$content = file_get_contents("serial_number.txt");
$contents= explode(",",$content);//explode()函数以","为标识符进行拆分

foreach ($contents as $k => $v)//遍历循环
{
  $id = $k;
  $serial_number = $v;
  mysql_query("insert into serial_number (`id`,`serial_number`)
      VALUES('$id','$serial_number')");
}

备注:方法有很多种,我这里是在拆分txt文件为数组后,然后遍历循环得到的数组,每循环一次,往数据库中插入一次。

再给大家分享一个支持大文件导入的

<?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

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 相关文章推荐
PHP一些有意思的小区别
Dec 06 PHP
php下通过POST还是GET来传值
Jun 05 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
PHP异步调用socket实现代码
Jan 12 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
怎样搭建PHP开发环境
Jul 28 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 #PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 #PHP
PHP实现linux命令tail -f
Feb 22 #PHP
PHP设计模式之观察者模式实例
Feb 22 #PHP
PHP编写RESTful接口的方法
Feb 21 #PHP
PHP常见漏洞攻击分析
Feb 21 #PHP
php采集神器cURL使用方法详解
Feb 19 #PHP
You might like
NOT NULL 和NULL
2007/01/15 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
python实现ip代理池功能示例
2019/07/05 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python pip配置国内源的方法
2020/02/14 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
品学兼优的大学生自我评价
2013/09/20 职场文书
运输服务质量承诺书
2014/03/27 职场文书
三年级评语大全
2014/04/23 职场文书
会议欢迎标语
2014/06/30 职场文书
灵山大佛导游词
2015/02/04 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle