PHPExcel自动导入数据到数据库

接着上一篇来继续往下完善,上一篇是实现从表格里把数据获取到显示出来,显示出来没有多大意义,需要把数据导入到数据库,然后在后台展现出来,才算是完整。


在网上看了些资料,关于导入到数据库的写法有很多种,大都是利用循环通过索引列个数来获取的,例如这样:


<?php

$result = array(array('你好','我好','她好','也好','很好','逗号')); //模拟

foreach ($result as $key1 =>$vlas ) {
    $data['name'] = $vals[0],
    .......
}
类似于上面的那种写法!


我也尝试的试了下,数据完美的进入到了数据库;但是总感觉哪里不对劲儿?....我创建了一个excel表,在里面添加了100个字段,按着上面的写法,我就需要写一百个索引字段...太恐怖了,如果再多呢(一般不会有这么多的,假设)不敢想...,接着我对着代码进行了一番思考:为什么就不能自动获取列中的数据呢?不管有多少字段,我不同关心,直接自动获取就行了,然后拼装SQL(获取使用框架)进行存入就OK了,这多方便呢! 想想都感觉很美......


经过一阵儿“苦思冥想”,想明白一个事儿——获取表中数据,其实就是行和列的关系,把这个关系搞明白了,代码自然就有了


思路:

1. 通过PHPEcxcel获取到表格中的数据,返回的是一个二维数组(这个是自己拼装的),第一维数组表示行数,第二维表示每个行里面的列数(也代表字段数)

2. 利用双循环(也许有更好的方法)外层循环循环行数,内层循环循环列数,行列是对应的

3. 当循环列数据的时候,数据的个数和字段个数同样也是对应的(在存入数据库的时候,只存数据,不需要表头)

4. 用一个变量,来接收每次循环的列数据(用于最后的sql拼装)


代码如下:



<?php


//链接数据库
$coon = new mysqli('localhost','root','xxxxxx','test');
if ($coon->connect_error) echo 'not connect mysqli databases';
$coon->query("sets utf8");

//引入函数文件
 include "./functions.php";

 $files = empty($_FILES['excel']) ? '' : $_FILES['excel'];

//判断是否是有效的数据
if ($files && is_array($files) ) {
	
	$ext = pathInfo($files['name'], PATHINFO_EXTENSION);
	if ($ext === 'xlsx'  || $ext === 'xls' ) {
		
		//执行函数,从表格里读取到数据返回来结果
		$result = ToLeadExcel( $files['tmp_name']);

		if ( $result && is_array($result ) ) { 

			/**
			 * @这一步的目的是为了防止多条数据插入时,执行多次sql语句
			 * @这里也可以改写成用预处理来做
			 */
			$sql = "insert into test values";

				/**
				 * 理解行和列的关系
				 * @第一个循环循环最外面的行数
				 * @第二个循环循环行里面的列
				 * @每次循环列的时候,把每个列数据拼装,并保存到一个变量里
				 * @当内部列循环完以后,对变量里的数据进行sql的拼装,依次循环
				 * @最后:有多少行就拼装多少次,最后执行一次sql语句就行了
				 * @这一步也可以做个判断,当数据达到多少时,执行一次sql
				 */
				foreach ($result as $key1 => $res) {

					/**
					 * @ param $conn_str
					 * @ conn_str是对列数进行拼装
					 * @ 每次列数据执行完毕后,清空$conn_str变量里的数据
					 * @ 目的是为了防止每次的数据进行叠加
					 * @ 也是为了保证每次行循环时,都是当前列的数据
					 */
					$conn_str = '';

					if($key1 !== 1 ) { //这一层判断是为了剔除表格头
						foreach ($res as $key2 => $res_res) {
							if ( !empty($res_res)){
								$conn_str .= ",'$res_res'";
							}
						}
						$sql .= '(null,' .ltrim($conn_str, ','). '),';
					}	
				}
		}


		/**
		 * 最后对插入数据结果进行判断
		 * return true or false
		 */
		$if_result = $coon->query(rtrim($sql, ','));
		if ($if_result) {
			echo '添加成功';
		} else {
			echo '添加失败';
		}
	}
	
}

使用框架的批量插入:

1. TP3.2可以考虑使用 addAll()方法

2. yii2.0批量插入数据可以如下写:

Yii::$app->db->createCommand()->batchInsert('user', ['name', 'age'], [  
    ['test01', 30],  
    ['test02', 20],  
    ['test03', 25],  
])->execute();

相互学习,相互交流,有更好实现方法的朋友请留言!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,我了解了你的问题。PHPExcel是一个强大的开源库,用于将Excel数据导入到MySQL数据库中。您可以使用PHPExcel自动化Excel打开、读取和处理功能,然后将其转换为MySQL中的相关数据。以下是一些简单的步骤来实现这一点: 1. 下载和安装PHPExcel库。 2. 使用PHPExcel打开Excel文件并读取需要的列和行数据。 3. 通过MySQL连接,将数据插入到MySQL数据库中的表中。 以下是PHP代码示例: ``` // 导入PHPExcel库 require_once 'PHPExcel.php'; // 连接数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接是否成功 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 创建Excel对象并加载文件 $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objPHPExcel = $objReader->load("example.xlsx"); // 获取工作表 $worksheet = $objPHPExcel->getActiveSheet(); // 遍历所有行并将其插入到数据库中 foreach ($worksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $data = array(); foreach ($cellIterator as $cell) { $data[] = $cell->getValue(); } $sql = "INSERT INTO example_table (column1, column2, column3) VALUES ('" . $data[0] . "', '" . $data[1] . "', '" . $data[2] . "')"; $result = $conn->query($sql); } $conn->close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值