zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

PHP文件数据库SQL代码 读取 插入 txt
2023-06-13 09:14:34 时间
/**
*$splitChar字段分隔符
*$file数据文件文件名
*$table数据库表名
*$conn数据库连接
*$fields数据对应的列名
*$insertType插入操作类型,包括INSERT,REPLACE
*/
复制代码代码如下:

<?php
/**
*$splitChar字段分隔符
*$file数据文件文件名
*$table数据库表名
*$conn数据库连接
*$fields数据对应的列名
*$insertType插入操作类型,包括INSERT,REPLACE
*/
functionloadTxtDataIntoDatabase($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))returnarray(true);
else{
returnarray(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/>";
}
/*sqldata1.txt
|0|A
|1|B
|1|C
|2|D
--cengji
CREATETABLE`cengji`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`parentid`int(11)NOTNULL,
`name`varchar(255)DEFAULTNULL,
PRIMARYKEY(`id`),
UNIQUEKEY`parentid_name_unique`(`parentid`,`name`)USINGBTREE
)ENGINE=InnoDBAUTO_INCREMENT=1602DEFAULTCHARSET=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
AstonDB192009
AstonDB292009
AstonDB392009
--cars
CREATETABLE`cars`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`make`varchar(16)NOTNULL,
`model`varchar(16)DEFAULTNULL,
`year`varchar(16)DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=14DEFAULTCHARSET=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
AstonDB192009
AstonDB292009
AstonDB392009
*/
//调用示例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("Cannotconnecttodatabase.Fatalerrorhandleby/test/db.php");
}
mysql_select_db("test",$connect);
mysql_query("SETNAMESutf8",$connect);
$conn=&$connect;
$db=&$connect;
}
?>
//*/

数据表结构
复制代码代码如下:

--数据表结构:
--100000_insert,1000000_insert
CREATETABLE`100000_insert`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`parentid`int(11)NOTNULL,
`name`varchar(255)DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8
100000(10万)行插入:Insert100000_line_datause2.5534288883209seconds
1000000(100万)行插入:Insert1000000_line_datause19.677318811417seconds
//可能报错:MySQLserverhasgoneaway
//解决:修改my.ini/my.cnfmax_allowed_packet=20M

作者:Zjmainstay