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();//输出图像 |
运行结果为:
相关文章
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23
- 在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
- 当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。mysql> create table menus(id t...2015-11-08
- 这篇文章主要介绍了c# 如何对CSV文件操作,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下...2020-11-03
- 本文主要介绍了python读取和保存mat文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-25
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 我们都知道用php+mysql在web 页实现数据库资料全部显示是非常简单而有趣的,数据库资料很少的情况下页面显示还是让人满意的,但是当数据库资料非常多的情况下,页面的显示情况将会变的非常糟糕,下面就来介绍一下如何实现当...2015-11-08
- 由于国内好几个浏览器都是双核浏览器(蛋痛,做一个浏览器壳就说国产,而且使用率高),有时打开网页会出现不兼容模式,在极速模式下是好的,现在我们来用代码实现网页自动调用国内...2016-09-20
- 这篇文章主要介绍了c# 用Dictionary实现日志数据批量插入的步骤,帮助大家更好的理解和使用c#中的Dictionary类,感兴趣的朋友可以了解下...2021-02-01
- perl CPAN中有一个Tie-File 模块极大方便了对大文件的操作...2020-06-29
使用MSScriptControl 在 C# 中读取json数据的方法
下面小编就为大家带来一篇使用MSScriptControl 在 C# 中读取json数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#实现appSettings节点读取与修改的方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了Java读取PDF中的表格的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22
- 这篇文章主要介绍了R语言读取csv文件出错的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 下在看一个利用fopen,file_get_contents读取本地服务器中.php文件的代码并显示的一些方法总结 如我有两个文件a.php,b.php。 a.php文件中的语句是: 代码如...2016-11-25