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中一个控制字符串输出的函数
Oct 09 PHP
深入PHP数据加密详解
Jun 18 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
php数据类型判断函数有哪些
Sep 23 PHP
php 修改、增加xml结点属性的实现代码
Oct 22 PHP
php session劫持和防范的方法
Nov 12 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
PHP四种基本排序算法示例
Apr 09 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
PHP中localeconv()函数的用法
Mar 26 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 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
优良学风班总结材料
2014/02/08 职场文书
名人演讲稿范文
2014/09/16 职场文书
走群众路线剖析材料
2014/10/09 职场文书
入党函调证明材料
2014/12/24 职场文书
2016年教师节慰问信
2015/12/01 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
Android自定义双向滑动控件
2022/04/19 Java/Android