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 socket方式提交的post详解
Jul 19 PHP
Smarty Foreach 使用说明
Mar 23 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
分享10段PHP常用代码
Nov 11 PHP
php实现图片缩略图的方法
Mar 29 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 PHP
php TP5框架生成二维码链接
Apr 01 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的库,结果发现很多东西
2006/12/31 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
js option删除代码集合
2008/11/12 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
js点击选择文本的方法
2015/02/09 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
django2笔记之路由path语法的实现
2019/07/17 Python
Python占用的内存优化教程
2019/07/28 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
python中wheel的用法整理
2020/06/15 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
什么是索引指示器
2012/08/20 面试题
Python的两道面试题
2013/06/29 面试题
幼儿园教师培训制度
2014/01/16 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js