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 组件化编程技巧
Jun 06 PHP
php中函数的形参与实参的问题说明
Sep 01 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 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和ACCESS写聊天室(一)
2006/10/09 PHP
php 分库分表hash算法
2009/11/12 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
简单的自定义php模板引擎
2016/08/26 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
phpStorm2020 注册码
2020/09/17 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Python用threading实现多线程详解
2017/02/03 Python
Python+Wordpress制作小说站
2017/04/14 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python3 实现口罩抽签的功能
2020/03/11 Python
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
学雷锋活动倡议书
2014/08/30 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技