php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)


Posted in PHP onJuly 31, 2012

/**
* $splitChar 字段分隔符
* $file 数据文件文件名
* $table 数据库表名
* $conn 数据库连接
* $fields 数据对应的列名
* $insertType 插入操作类型,包括INSERT,REPLACE
*/

<?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 
|0|A 
|1|B 
|1|C 
|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 
Aston DB19 2009 
Aston DB29 2009 
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 
Aston DB19 2009 
Aston DB29 2009 
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

作者:Zjmainstay
PHP 相关文章推荐
php 高性能书写
Dec 11 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
PHP合并静态文件详解
Nov 14 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
Laravel find in set排序实例
Oct 09 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
php切割页面div内容的实现代码分享
Jul 31 #PHP
php中数组首字符过滤功能代码
Jul 31 #PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 #PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 #PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 #PHP
php 调试利器debug_print_backtrace()
Jul 23 #PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 #PHP
You might like
php 结果集的分页实现代码
2009/03/10 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP中phar包的使用教程
2017/06/14 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
python删除列表中重复记录的方法
2015/04/28 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
python实现ip地址的包含关系判断
2020/02/07 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
传媒专业推荐信范文
2013/11/23 职场文书
英语教学随笔感言
2014/02/20 职场文书
投标承诺书怎么写
2014/05/24 职场文书
幼师求职自荐信
2014/05/31 职场文书
刮痧观后感
2015/06/05 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python