php使用PDO事务配合表格读取大量数据插入操作实现方法


Posted in PHP onFebruary 16, 2017

本文实例讲述了php使用PDO事务配合表格读取大量数据插入操作实现方法。分享给大家供大家参考,具体如下:

在处理大量数据的时候,或者同时对几个表操作,而这几个表的操作要求,要么都成功,要么都失败的时候,就需要用到事物,而PDO中提供的事物,一般可以满足需求。

关于事务的具体讲解,https://3water.com/article/105744.htm

本篇文章,只涉及一个小例子。

在向数据库导入一个表格的时候,难免excel文件中存在部分错误,如果用常规方法,将会导致,一部分插入了数据库,一部分没有插入,会带了很大的不便。

<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL ^ E_NOTICE);
require_once 'excel_reader2.php';//导入excel_reader文件
$data = new Spreadsheet_Excel_Reader();//创建对象
$data->setOutputEncoding('UTF-8');//设置编码格式
$data->read("example.xls");//读取excel文档*/
echo $hang=$data->sheets[0]['numRows']."行<br>";//读出一共几行
echo $lie=$data->sheets[0]['numCols']."列<br>";//读出一共几列
$dbms='mysql';
$dbname='biaoge';
$user='root';
$pwd='123456';
$host='localhost';
$dsn="$dbms:host=$host;dbname=$dbname";
try {
  $pdo = new PDO($dsn, $user, $pwd);
  $pdo->exec("SET NAMES UTF8");//设置数据库编码
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//异常模式
  $pdo->beginTransaction();//开启事物
  $query = "INSERT INTO test SET id1=?,id2=?,id3=?,id4=?,id5=?";//预编译插入语句
  $result=$pdo->prepare($query);
//  $result->execute(array("111","222","333","444","555"));
//  $pdo->commit();
  for ($i = 1; $i <= $hang; $i++) {
    $id1=$data->sheets[0]['cells'][$i][1];
    $id2=$data->sheets[0]['cells'][$i][2];
    $id3=$data->sheets[0]['cells'][$i][3];
    $id4=$data->sheets[0]['cells'][$i][4];
    $id5=$data->sheets[0]['cells'][$i][5];
    $result->bindParam(1,$id1);//绑定参数
    $result->bindParam(2,$id2);//绑定参数
    $result->bindParam(3,$id3);//绑定参数
    $result->bindParam(4,$id4);//绑定参数
    $result->bindParam(5,$id5);//绑定参数
    echo $result->execute();//执行插入操作
  }
  $pdo->commit();//执行事物的提交操作*/
}catch (PDOException $e){
  die("Error!: ".$e->getMessage().'<br>');
  $pdo->rollBack();//执行事物的回滚操作
}

补充:

异常模式将会创建一个PDOException,并设置errorCode属性,它可以将执行代码封装到一个try{}catch{}语句块中。未捕获的异常将会导致脚本中断,并显示堆栈跟踪让用户了解是哪里出现了问题。
除此之外:

警告模式会产生一个PHP警告,并设置errorCode属性。如果设置的是警告模式,那么除非明确的检查错误代码,否则程序将继续按照其方式运行。

在默认模式中设置PDOStatement对象的errorCode属性,但不进行其他任何操作。

PHP 相关文章推荐
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
试用php中oci8扩展
Jun 18 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
php简单创建zip压缩文件的方法
Apr 30 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 PHP
PHP常量及变量区别原理详解
Aug 14 PHP
php的PDO事务处理机制实例分析
Feb 16 #PHP
php使用include 和require引入文件的区别
Feb 16 #PHP
Yii2实现UploadedFile上传文件示例
Feb 15 #PHP
使用PHPMailer发送邮件实例
Feb 15 #PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 #PHP
php使用GD2绘制几何图形示例
Feb 15 #PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 #PHP
You might like
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
心得体会开头
2014/01/01 职场文书
留学推荐信怎么写
2014/01/25 职场文书
优秀食品类广告词
2014/03/19 职场文书
毕业大学生自荐信
2014/06/17 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
2015年教师节活动总结
2015/03/20 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
关于召开会议的通知
2015/04/15 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
MySQL派生表联表查询实战过程
2022/03/20 MySQL
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang