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

 更新时间:2017年7月6日 23:49  点击:2316
本文介绍了php使用PDO事务配合表格读取大量数据插入操作实现方法,非常实用,有兴趣的同学快来看看吧。

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

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

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

 

 代码如下 复制代码

<?php

header("Content-Type: text/html; charset=utf-8");

error_reporting(E_ALL ^ E_NOTICE);

require_once'excel_reader2.php';//导入excel_reader文件

$data=newSpreadsheet_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=newPDO($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属性,但不进行其他任何操作。

小编推荐的这篇文章介绍了使用PHPMailer发送邮件实例,非常实用,有兴趣的同学快来看看吧。

PHPMailer类源代码下载地址:https://github.com/PHPMailer/PHPMailerhttps://github.com/PHPMailer/PHPMailer

 

 代码如下 复制代码

<?php

/*

to:  邮件接收地址

subject: 邮件主题

body: 邮件内容

attachpath:附件地址

cc: 邮件抄送地址

bcc: 邮件暗抄送地址

*/

functionsend_mail($to,$subject="",$body="",$attachpath="",$cc="",$bcc="")

{

 // 对邮件内容进行必要的过滤

 $body=eregi_replace("[\]",'',$body); 

  

 // 设定时区

 date_default_timezone_set("PRC");

  

 require_once('class.phpmailer.php');

 require_once("class.smtp.php");

  

 // 实例化PHPMailer对象

 $mail=newPHPMailer();    

  

 // 设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置为 UTF-8

 $mail->CharSet ="UTF-8";

  

 // 设定使用SMTP服务

 $mail->IsSMTP();

  

 // 启用 SMTP 验证功能

 $mail->SMTPAuth = true;

  

 // SMTP 安全协议

 $mail->SMTPSecure ="ssl";

  

 // SMTP 服务器

 $mail->Host ="smtp.qq.com";

  

 // SMTP服务器的端口号

 $mail->Port = 465;

  

 // SMTP服务器用户名和密码

 $mail->Username ="xxxxxx@qq.com"; 

 $mail->Password ="xxxxxx";  

  

 // 设置发件人地址和名称,名称可有可无

 $mail->SetFrom("xxxxxx@qq.com","xxxxxx");

  

 // 设置邮件接收地址和名称,第二个参数无所谓。必须用AddAddress添加邮件接收地址。AddReplyTo方法没什么用。

 //$mail->AddReplyTo("xxxxxx@163.com", "xxxxxx");

 $mailaddrs= split(",",$to);

 foreach($mailaddrsas$addres)

 {

 //校验邮箱地址是否合法

 if(filter_var($addres, FILTER_VALIDATE_EMAIL))

 {

  $mail->AddAddress($addres); 

 }

 }

  

 // 设置邮件抄送地址

 if($cc!="")

 {

 $ccaddrs= split(",",$cc);

 foreach($ccaddrsas$ccaddr)

 {

  //校验邮箱地址是否合法

  if(filter_var($ccaddr, FILTER_VALIDATE_EMAIL))

  {

  $mail->addCC($ccaddr); 

  }

 }

 }

  

 // 设置邮件暗抄送地址,私密发送

 if($bcc!="")

 {

 $bccaddrs= split(",",$bcc);

 foreach($bccaddrsas$bccaddr)

 {

  //校验邮箱地址是否合法

  if(filter_var($bccaddr, FILTER_VALIDATE_EMAIL))

  {

  $mail->addBCC($bccaddr); 

  }

 }

 }

  

 // 设置邮件主题

 $mail->Subject =$subject;

  

 // 可选项,向下兼容考虑

 $mail->AltBody ="为了查看该邮件,请切换到支持 HTML 的邮件客户端";

  

 // 设置邮件内容

 $mail->MsgHTML($body);    

  

 //使用HTML格式发送邮件

 $mail->IsHTML(true);

  

 // 添加附件,第一个参数是附件地址,第二个参数附件名

 //$mail->AddAttachment("images/phpmailer.gif");

 $mail->AddAttachment($attachpath);

  

 // 发送邮件

 if(!$mail->Send())

 {

 echo"发送失败:".$mail->ErrorInfo . PHP_EOL;

 }

 else

 {

 echo"恭喜,邮件发送成功!". PHP_EOL;

 }

}

$emailAddr="xxxxxx@163.com,xxxxxx@qq.com,";

send_mail($emailAddr,"测试邮件","<h1>使用PHPMailer类发送的邮件。</h1>","mail/20170216.gif","xxxxxx@qq.com","");

?>

 

测试结果:

说明:第44行的SMTP服务器密码为qq邮箱授权码。

登录QQ邮箱->设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->生成授权码

小编给大家推荐的这篇文章介绍了php使用GD2绘制几何图形示例,非常实用,有兴趣的同学快来看看吧。

使用GD2函数不仅可以绘制线条图形,而且可以绘制填充图形,如填充圆形,填充矩形等。下面对GD2中常用的填充图形的绘制方法进行介绍。

bool imagefill( resource image, int x, int y, int color )

imagefill()函数在image图像的坐标( x, y ) (图像的左上角为(0,0))处用color颜色执行区域填充(即与(x,y)点颜色相同切相邻的点都会被填充)。

bool imagefilledarc ( resource image , int cx , int cy , int w , int h , int s , int e , int color , int style )

imagefilledarc() 在 image 所代表的图像中以 cx,cy(图像左上角为 0, 0)画一椭圆弧。成功时返回 TRUE,  或者在失败时返回 FALSE.w 和 h 分别指定了椭圆的宽和高,s 和 e 参数以角度指定了起始和结束点。style  可以是下列值按位或(OR)后的值:

IMG_ARC_PIE
IMG_ARC_CHORD
IMG_ARC_NOFILL
IMG_ARC_EDGED

IMG_ARC_PIE 和 IMG_ARC_CHORD 是互斥的;IMG_ARC_CHORD  只是用直线连接了起始和结束点,IMG_ARC_PIE  则产生圆形边界(如果两个都用,IMG_ARC_CHORD生效)。IMG_ARC_NOFILL  指明弧或弦只有轮廓,不填充。IMG_ARC_EDGED 指明用直线将起始和结束点与中心点相连,和 IMG_ARC_NOFILL  一起使用是画饼状图轮廓的好方法(而不用填充)。

bool imagefilledellipse ( resource image , int cx , int cy , int w , int h , int color )

imagefilledellipse() 在 image 所代表的图像中以 cx,cy(图像左上角为 0, 0)为中心画一个椭圆。w 和 h 分别指定了椭圆的宽和高。椭圆用 color 颜色填充。成功时返回 TRUE, 或者在失败时返回 FALSE.

bool imagefilledrectangle( resource image, int x1, int y1, int x2, int y2, int color )

该函数在image图像中绘制一个用color颜色填充了的矩形, 其左上角坐标为(x1, y1),右下角的坐标为(x2, y2)。(0,0)为图像的左上角。

例如:应用如上函数,绘制填充圆形和填充正方形,代码如下

 代码如下复制代码

<?php

  header("Content-type: image/png");//将图像输出到浏览器

  $img= imagecreate(400, 200);//创建一个400X200的画布

  $bg= imagecolorallocate($img, 0, 0, 255);//设置背景颜色

  $white= imagecolorallocate($img, 255, 255 ,255);//设置填充颜色

  imagefilledellipse($img, 100, 100, 150, 150,$white);//绘制填充圆形

  imagefilledrectangle($img, 200, 50, 300, 150,$white);//绘制填充正方形

  imagepng($img);//以png格式输出图像

  imagedestroy($img);//释放资源

运行结果如下所示

小编推荐的这篇文章介绍了php使用Jpgraph创建柱状图展示年度收支表效果示例,非常实用,有兴趣的同学快来看看吧。

应用GD2库可以创建各式各样的图像,但是制作复杂的统计图形,仅通过GD2函数库来实现,则显得非常繁琐。PHP从诞生走向成熟经历了多次变革,在这期间,许多组织机构都开发了PHP的框架和类库。Jpgraph图形类库就是其中非常实用、流行的代表,不仅功能强大,而且操作简单。

例如:应用Jpgraph创建柱状图展示年度收支情况。

(1)将Jpgraph类库,首相应该,下载该类库的压缩包,下载完毕后解压到项目所在目录。

配置方式有两种,

(1)打开PHP的安装目录,编辑php.ini文件并修改其中的include_path参数,在其后增加文件夹名,如include_path = ".;D:\wampserver\www\jpgraph"

(2)重启Apache服务器即可生效

如果只想在本站点使用Jpgraph,则直接解压到项目的工程目录下即可。

需要用require_once等语句将所有文件导入到项目中。

例如建立index.php页面

 代码如下 复制代码

<?php

require_once'jpgraph/src/jpgraph.php';//导入Jpgraph类库

require_once'jpgraph/src/jpgraph_bar.php';//导入Jpgraph类库的柱状图功能

$data=array(80, 73, 89, 43, 56, 76, 89, 96, 93, 30, 98, 78);//设置统计数据

$xdata=array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

$graph=newGraph(600, 300);//设置画布大小

$graph->SetScale('textlin');//设置坐标刻度类型

$graph->SetShadow();//设置画布阴影

$graph->img->SetMargin(40, 30, 20, 40);//设置统计图边距

$barplot=newBarPlot($data);//实例化BarPlot对象

$barplot->SetFillColor('blue');//设置柱状图前景色

$barplot->value->Show();//显示

$graph->Add($barplot);

$graph->title->Set(iconv('utf-8','GB2312//IGNORE','***科技有限公司年度收支')); //设置标题iconv防止中文乱码

$graph->xaxis->title->Set(iconv('utf-8','GB2312//IGNORE','月份')); //设置X轴名称

$graph->xaxis->SetTickLabels($xdata);//设置x轴标注

$graph->yaxis->title->Set(iconv('utf-8','GB2312//IGNORE','总金额(万元)')); //设置y轴名称

$graph->title->SetFont(FF_SIMSUN, FS_BOLD);//设置标题字体

$graph->xaxis->title->SetFont(FF_SIMSUN, FS_BOLD);//设置x轴字体

$graph->yaxis->title->SetFont(FF_SIMSUN, FS_BOLD);//设置y轴字体

$graph->Stroke();//输出图像

运行结果为:

[!--infotagslink--]

相关文章

  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • mybatis-plus 处理大数据插入太慢的解决

    这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • Mysql中 unique列插入重复值该怎么解决呢

    当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。mysql> create table menus(id t...2015-11-08
  • c# 对CSV文件操作(写入、读取、修改)

    这篇文章主要介绍了c# 如何对CSV文件操作,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下...2020-11-03
  • python读取和保存mat文件的方法

    本文主要介绍了python读取和保存mat文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-25
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • PHP翻页跳转功能实现方法

    我们都知道用php+mysql在web 页实现数据库资料全部显示是非常简单而有趣的,数据库资料很少的情况下页面显示还是让人满意的,但是当数据库资料非常多的情况下,页面的显示情况将会变的非常糟糕,下面就来介绍一下如何实现当...2015-11-08
  • 网页自动调用国内双核浏览器的极速模式的实现方法

    由于国内好几个浏览器都是双核浏览器(蛋痛,做一个浏览器壳就说国产,而且使用率高),有时打开网页会出现不兼容模式,在极速模式下是好的,现在我们来用代码实现网页自动调用国内...2016-09-20
  • c# 用Dictionary实现日志数据批量插入

    这篇文章主要介绍了c# 用Dictionary实现日志数据批量插入的步骤,帮助大家更好的理解和使用c#中的Dictionary类,感兴趣的朋友可以了解下...2021-02-01
  • perl大文件读取处理的模块介绍

    perl CPAN中有一个Tie-File 模块极大方便了对大文件的操作...2020-06-29
  • 使用MSScriptControl 在 C# 中读取json数据的方法

    下面小编就为大家带来一篇使用MSScriptControl 在 C# 中读取json数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#实现appSettings节点读取与修改的方法

    这篇文章主要介绍了C#实现appSettings节点读取与修改的方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • Java读取PDF中的表格的方法示例

    本文主要介绍了Java读取PDF中的表格的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22
  • R语言读取csv文件出错的解决方案

    这篇文章主要介绍了R语言读取csv文件出错的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • php读取本地php文件源代码输出显示

    下在看一个利用fopen,file_get_contents读取本地服务器中.php文件的代码并显示的一些方法总结 如我有两个文件a.php,b.php。 a.php文件中的语句是: 代码如...2016-11-25