php读取txt文件并将数据插入到数据库

前端之家收集整理的这篇文章主要介绍了php读取txt文件并将数据插入到数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天测试一个功能,需要往数据库中插入一些原始数据,PM给了一个txt文件,如何快速的将这个txt文件内容拆分为所要的数组,然后再插入到数据库中?

serial_number.txt的示例内容

serial_number.txt:

创建数据表:

sql;"> create table serial_number( id int primary key auto_increment not null,serial_number varchar(50) not null )ENGINE=InnoDB DEFAULT CHARSET=utf8;

PHP代码如下:

403_14@ $v)//遍历循环 { $id = $k; $serial_number = $v; MysqL_query("insert into serial_number (`id`,`serial_number`) VALUES('$id','$serial_number')"); }

备注:方法有很多种,我这里是在拆分txt文件为数组后,然后遍历循环得到的数组,每循环一次,往数据库中插入一次。

再给大家分享一个支持文件导入的

PHP;"> 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,$fields);
if (array_shift($result)){
echo 'Success!
';
}else {
echo 'Failed!--Error:'.array_shift($result).'
';
}
/*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,$fields);
if (array_shift($result)){
echo 'Success!
';
}else {
echo 'Failed!--Error:'.array_shift($result).'
';
}
/* 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','year');
$table = 'cars';
$insertType = 'REPLACE';
$result = loadTxtDataIntoDatabase($splitChar,$fields,$insertType);
if (array_shift($result)){
echo 'Success!
';
}else {
echo 'Failed!--Error:'.array_shift($result).'
';
}
/ 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,$fields);
if (array_shift($result)){
echo 'Success!
';
}else {
echo 'Failed!--Error:'.array_shift($result).'
';
}

//附: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

sql;"> CREATE TABLE `100000_insert` ( `id` int(11) NOT NULL AUTO_INCREMENT,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

原文链接:https://www.f2er.com/php/20337.html

猜你在找的PHP相关文章