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 相关文章推荐
在数据量大(超过10万)的情况下
Jan 15 PHP
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
php文件下载处理方法分析
Apr 22 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP批量删除jQuery操作
Jul 23 PHP
PHP http请求超时问题解决方案
Nov 13 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
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
初中学生期末评语
2014/04/24 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
教师节感想
2015/08/11 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
如何拟写通知正文?
2019/04/02 职场文书