php偷偷接受数据,拒绝人工新增单条数据,PHP实现读取文件导入数据
今天分享些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实现读取文件导入数据相关推荐
- 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格式数据 目录
- python导入csv文件-Python从CSV文件导入数据和生成简单图表
原标题:Python从CSV文件导入数据和生成简单图表 我们已经完成Python的基础环境搭建工作,现在我们尝试导入CSV数据 我们准备一个csv测试数据,文件名是csv-test-data.csv数 ...
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- 文件的创建与读取 文件的数据添加
文件的创建与读取 文件的数据添加 一:概要 1:首先要站在程序的角度上. 2:文件的创建 即将程序中的数据 写入到文件当中. 3:文件的读取 即将一个文件中的信息读取到程序当中. 二:步骤 1:创 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- 计算机共享文件误删怎么恢复,在电脑上不小心把共享里的EXCEL表格数据给删除了,该怎么恢复这个文件的数据啊?,excel表格里误删数据恢复...
请问excel表格被误删了一列并保存了 要怎么恢复 我们需备的材料分别是:电脑.excel表格. 1.首先打开excel工作簿,单击左的文件选项. 2.在弹出的界面中找到管理工作簿,单击恢复未保存的工 ...
- power bi导入文件夹_从Power BI Desktop中的PDF文件导入数据
power bi导入文件夹 Power BI Desktop is a useful reporting and analytical tool to represent data in variou ...
- 从Oracle导出数据到TXT文件从TXT文件导入数据到Oracle
如果是txt文件的数据导入oracle中,数据量大的话用pl/sql会卡死,那么就要用到sqlload命令. 前两天在做一个不算任务的任务,用shell脚本将数据库中的数据导出到文件,在万能的百度上找 ...
- Linux下通过txt文件导入数据到MySQL数据库
1.修改配置文件 在 /etc/my.conf 中添加 local_infile=1 2.重启MySQL >service mysqld restart 3.登录数据库 登录时添加参数 --lo ...
最新文章
- 【机器视觉】 case算子
- Shell输入输出重定向:Shell Here Document,/dev/null文件
- 《软件工程》 教 学 大 纲
- 使用 ABAP 代码解析一个 class 的所有方法
- 查找练习 hash——出现过的数字
- 海狮号水下机器人_供应海狮(SeaLion)ROV水下机器人
- android基础之TabSpec和TabHost
- 如何判断链表有环、如何判断两个链表相交
- Git LFS的使用
- zookeeper 日志查看_Linux环境下安装部署单机Zookeeper
- python实现QQ登陆验证码数据采集
- html重置默认字体,html网页默认字体
- Java编写飞机大战(超级详细的完整版)--附源码及图片
- Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率
- STM32 电容触摸屏I2C转USB实现
- 使用Python实现电子词典
- Nginx源码完全注释(1)ngx_alloc.h / ngx_alloc.c
- 编码,隐匿在计算机软硬件背后的语言读书笔记(6/7/8)
- 用C51单片机的外部中断设计1s定时器
- 疫情对广州房价的影响
热门文章
- snmp的团体名配置_小白都能看懂的Linux系统下安装配置Zabbix
- html5上传steam,Steam 上的 HTML5 Javascript Game Engine
- PI调节器的算法优化
- C语言 文本文件读取、写入与定位(详细介绍)
- 很有点意思的特效,本人很喜欢
- CSS语法之@规则(at-rule)
- 【JZOJ5620】修炼
- DSP TMS320C28x CPU 和指令设置参考【CPU】
- 大前端学习2-1__脚手架工具
- 【跃迁之路】【727天】程序员高效学习方法论探索系列(实验阶段484-2019.2.17)...