今天分享些php导入文件,读取数据,插入数据到数据库的代码,涉及的场景如下:

数据库表系统数据(如:省市区)

前端页面从文件导入数据,插入数据库(如:黑名单导入)

第一个是一个php的脚本代码,实现思路是读取txt文件内容,生成插入sql的语句,然后执行sql,完成。

要导入的数据

代码实现

代码简单介绍一下,本脚本是在自行封装的带有swoole扩展的php框架,request是已经封装好的函数用于接收的参数(类似$_GET[]);fopen读取对应路径的文件(路径可修改)(txt文件一行一个城市名称),循环读取每一行并按照格式赋值到一数组中;执行foreach循环,生成sql语句;应用mysql连接池,执行sql,插入数据(可用原生mysql执行函数);log日志打印结果;respose返回数据查看,完!

publicfunctionimportData()

{

$request=$this->request()->getRawParams();

$table=$request['table'];

$fileName=$request['file_name'];

$fileNum=$request['file_num'];

$remark=$request['remark'];

$return_sql=[];

$return_success=[];

for($i=0;$i

$filename=ROOT_PATH.'/bootstrap/'.$fileName.'/'.$i.'.txt';

$fps=fopen($filename,'r');

$temp=[];

while(!feof($fps)){

$ceshi=fgets($fps);

$temp[]=[

'keyq'=>'area',

'key_name'=>'城市等级,

'codeq' => $i,

'code_name' => str_replace("\r\n","",$ceshi),

'remark' => is_array($remark)?$remark[$i]:$remark,

];

}

$filter = '';

$key_list = '';

foreach ($temp as $value) {

$key_list = implode(",", array_keys($value)) . "";

$value_list = "'" . implode("','", array_values($value)) . "'";

$filter .= "(" . $value_list . "),";

}

$sql = "insert" . " into " . $table . "(".$key_list.") values ".$filter;

$sql = substr($sql,0,strlen($sql)-1).';';

$conn = MysqlPool::getInstance()->getObj(60);

$result = $conn->insertQuery($sql);

MysqlPool::getInstance()->recycleObj($conn);

Log::getInstance()->info($result);

$return_sql[] = $sql;

$return_success[$i] = $result??0;

}

$this->response()->setResult( Result::success($return_sql));

}

第二个是更深一层的封装读取文件,并插入到数据库

要导入数据

黑名单导入

函数参数介绍:

$filePath 文件的tmp_name

$startRow 开始读取的行数,默认0行

$checkTitle 是否检查标题,默认false

$titkeRaw 文件标题在第几行,默认0行

$titleConfig 标题格式(数组),例如:array('黑名单'=>'word');

$keys 内容格式(数组)例如:array('word');

代码实现

publicfunctionreadCsv($filePath,$startRow=0,$checkTitle=false,$titleRow=0,$titleConfig=[],$keys=[])

{

$row=(is_numeric($startRow)&&$startRow>=0)?$startRow:0;

$titleIndexArr=array();

$resultArr=array();

$wordsArray=[];

$file=fopen($filePath,'r');

//读取文件内容

while($data=fgetcsv($file)){

$rowCount=count($data);

if($rowCount>0){

for($r=0;$r

$data[$r]=mb_convert_encoding($data[$r],'UTF-8','GBK,GB2312,UTF-8');

}

$wordsArray[]=$data;

}

}

fclose($file);

$rowCount=count($wordsArray);

for(;$row

$tempArr=$wordsArray[$row];

if(isset($tempArr)&&!empty($tempArr)){

$dataArr=array();

///验证标题行

if($checkTitle&&$row==$titleRow){

foreach($tempArras$key=>$value){

$dataArr[$key]=trim(str_replace("'",'',str_replace("\"",'',$value)));

}

$titleIndexArr=$this->checkTitle($dataArr,$titleConfig,$keys);

if(empty($titleIndexArr)){

returnarray('code'=>1,'msg'=>'导入文件格式内容有误,请检查导入文档是否正确');

}

}else{

if($checkTitle&&!empty($titleIndexArr)){

foreach($tempArras$key=>$value){

if(!isset($titleIndexArr[$key])||empty($titleIndexArr[$key])){

continue;

}

$keyStr=$titleIndexArr[$key];

$dataArr[$keyStr]=trim(str_replace("'",'',str_replace("\"",'',ltrim($value,'=\"'))));

}

}else{

foreach($tempArras$key=>$value){

$dataArr[]=trim(str_replace("'",'',str_replace("\"",'',ltrim($value,'=\"'))));

}

}

$resultArr[$row]=$dataArr;

}

}

}

returnarray('code'=>0,'msg'=>'success','datas'=>$resultArr);

}

/**

* 验证标题行并返回各属性对应的index

* @param $titleArr

* 表头配置 格式:array(key=>value); key:表头名,value:要替换成的code 例:array('订单编号'=>'order_sn')

* @param $titleConfig

* 表头必须要有的key数组, 例: array('order_sn', 'order_status')

* @param $keys

* @return array

*/

protectedfunctioncheckTitle(array $titleArr,array $titleConfig,array $keys=array())

{

///根据标题行,排列数据

if(empty($titleArr)||empty($titleConfig)){

returnarray();

}

$resultArr=array();

foreach($titleArras$key=>$value){

$resultArr[$key]=isset($titleConfig[$value])?$titleConfig[$value]:'';

}

if(!empty($keys)){

foreach($keysas$mk=>$mv){

$flag=array_search($mv,$resultArr);

if($flag===false){

returnarray();

}

}

}

return$resultArr;

}

欢迎扫码关注

php偷偷接受数据,拒绝人工新增单条数据,PHP实现读取文件导入数据相关推荐

  1. R语言使用haven包的read_spss函数读取spss格式数据、使用haven包的read_sas函数读取SAS格式数据、使用haven包的read_dta函数读取Stata格式数据

    R语言使用haven包的read_spss函数读取spss格式数据.使用haven包的read_sas函数读取SAS格式数据.使用haven包的read_dta函数读取Stata格式数据 目录

  2. python导入csv文件-Python从CSV文件导入数据和生成简单图表

    原标题:Python从CSV文件导入数据和生成简单图表 我们已经完成Python的基础环境搭建工作,现在我们尝试导入CSV数据 我们准备一个csv测试数据,文件名是csv-test-data.csv数 ...

  3. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

  4. 文件的创建与读取 文件的数据添加

    文件的创建与读取   文件的数据添加 一:概要 1:首先要站在程序的角度上. 2:文件的创建 即将程序中的数据 写入到文件当中. 3:文件的读取 即将一个文件中的信息读取到程序当中. 二:步骤 1:创 ...

  5. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...

  6. 计算机共享文件误删怎么恢复,在电脑上不小心把共享里的EXCEL表格数据给删除了,该怎么恢复这个文件的数据啊?,excel表格里误删数据恢复...

    请问excel表格被误删了一列并保存了 要怎么恢复 我们需备的材料分别是:电脑.excel表格. 1.首先打开excel工作簿,单击左的文件选项. 2.在弹出的界面中找到管理工作簿,单击恢复未保存的工 ...

  7. power bi导入文件夹_从Power BI Desktop中的PDF文件导入数据

    power bi导入文件夹 Power BI Desktop is a useful reporting and analytical tool to represent data in variou ...

  8. 从Oracle导出数据到TXT文件从TXT文件导入数据到Oracle

    如果是txt文件的数据导入oracle中,数据量大的话用pl/sql会卡死,那么就要用到sqlload命令. 前两天在做一个不算任务的任务,用shell脚本将数据库中的数据导出到文件,在万能的百度上找 ...

  9. Linux下通过txt文件导入数据到MySQL数据库

    1.修改配置文件 在 /etc/my.conf 中添加 local_infile=1 2.重启MySQL >service mysqld restart 3.登录数据库 登录时添加参数 --lo ...

最新文章

  1. 【机器视觉】 case算子
  2. Shell输入输出重定向:Shell Here Document,/dev/null文件
  3. 《软件工程》 教 学 大 纲
  4. 使用 ABAP 代码解析一个 class 的所有方法
  5. 查找练习 hash——出现过的数字
  6. 海狮号水下机器人_供应海狮(SeaLion)ROV水下机器人
  7. android基础之TabSpec和TabHost
  8. 如何判断链表有环、如何判断两个链表相交
  9. Git LFS的使用
  10. zookeeper 日志查看_Linux环境下安装部署单机Zookeeper
  11. python实现QQ登陆验证码数据采集
  12. html重置默认字体,html网页默认字体
  13. Java编写飞机大战(超级详细的完整版)--附源码及图片
  14. Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率
  15. STM32 电容触摸屏I2C转USB实现
  16. 使用Python实现电子词典
  17. Nginx源码完全注释(1)ngx_alloc.h / ngx_alloc.c
  18. 编码,隐匿在计算机软硬件背后的语言读书笔记(6/7/8)
  19. 用C51单片机的外部中断设计1s定时器
  20. 疫情对广州房价的影响

热门文章

  1. snmp的团体名配置_小白都能看懂的Linux系统下安装配置Zabbix
  2. html5上传steam,Steam 上的 HTML5 Javascript Game Engine
  3. PI调节器的算法优化
  4. C语言 文本文件读取、写入与定位(详细介绍)
  5. 很有点意思的特效,本人很喜欢
  6. CSS语法之@规则(at-rule)
  7. 【JZOJ5620】修炼
  8. DSP TMS320C28x CPU 和指令设置参考【CPU】
  9. 大前端学习2-1__脚手架工具
  10. 【跃迁之路】【727天】程序员高效学习方法论探索系列(实验阶段484-2019.2.17)...