php使用PDO事務(wù)配合表格讀取大量數(shù)據(jù)插入操作實(shí)現(xiàn)方法
本文實(shí)例講述了php使用PDO事務(wù)配合表格讀取大量數(shù)據(jù)插入操作實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
在處理大量數(shù)據(jù)的時(shí)候,或者同時(shí)對(duì)幾個(gè)表操作,而這幾個(gè)表的操作要求,要么都成功,要么都失敗的時(shí)候,就需要用到事物,而PDO中提供的事物,一般可以滿足需求。
關(guān)于事務(wù)的具體講解,http://www.dbjr.com.cn/article/105744.htm
本篇文章,只涉及一個(gè)小例子。
在向數(shù)據(jù)庫(kù)導(dǎo)入一個(gè)表格的時(shí)候,難免excel文件中存在部分錯(cuò)誤,如果用常規(guī)方法,將會(huì)導(dǎo)致,一部分插入了數(shù)據(jù)庫(kù),一部分沒有插入,會(huì)帶了很大的不便。
<?php header("Content-Type: text/html; charset=utf-8"); error_reporting(E_ALL ^ E_NOTICE); require_once 'excel_reader2.php';//導(dǎo)入excel_reader文件 $data = new Spreadsheet_Excel_Reader();//創(chuàng)建對(duì)象 $data->setOutputEncoding('UTF-8');//設(shè)置編碼格式 $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");//設(shè)置數(shù)據(jù)庫(kù)編碼 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//異常模式 $pdo->beginTransaction();//開啟事物 $query = "INSERT INTO test SET id1=?,id2=?,id3=?,id4=?,id5=?";//預(yù)編譯插入語(yǔ)句 $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);//綁定參數(shù) $result->bindParam(2,$id2);//綁定參數(shù) $result->bindParam(3,$id3);//綁定參數(shù) $result->bindParam(4,$id4);//綁定參數(shù) $result->bindParam(5,$id5);//綁定參數(shù) echo $result->execute();//執(zhí)行插入操作 } $pdo->commit();//執(zhí)行事物的提交操作*/ }catch (PDOException $e){ die("Error!: ".$e->getMessage().'<br>'); $pdo->rollBack();//執(zhí)行事物的回滾操作 }
補(bǔ)充:
異常模式將會(huì)創(chuàng)建一個(gè)PDOException,并設(shè)置errorCode屬性,它可以將執(zhí)行代碼封裝到一個(gè)try{}catch{}語(yǔ)句塊中。未捕獲的異常將會(huì)導(dǎo)致腳本中斷,并顯示堆棧跟蹤讓用戶了解是哪里出現(xiàn)了問題。
除此之外:
警告模式會(huì)產(chǎn)生一個(gè)PHP警告,并設(shè)置errorCode屬性。如果設(shè)置的是警告模式,那么除非明確的檢查錯(cuò)誤代碼,否則程序?qū)⒗^續(xù)按照其方式運(yùn)行。
在默認(rèn)模式中設(shè)置PDOStatement對(duì)象的errorCode屬性,但不進(jìn)行其他任何操作。
附:
php-excel-reader本站下載地址: http://www.dbjr.com.cn/codes/67223.html
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫(kù)技巧總結(jié)》、《php+Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》、《PHP+MongoDB數(shù)據(jù)庫(kù)操作技巧大全》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP5中使用PDO連接數(shù)據(jù)庫(kù)的方法
- PHP中PDO連接數(shù)據(jù)庫(kù)中各種DNS設(shè)置方法小結(jié)
- ThinkPHP框架基于PDO方式連接數(shù)據(jù)庫(kù)操作示例
- PHP實(shí)現(xiàn)的pdo連接數(shù)據(jù)庫(kù)并插入數(shù)據(jù)功能簡(jiǎn)單示例
- PHP利用pdo_odbc實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)示例【基于ThinkPHP5.1搭建的項(xiàng)目】
- php中在PDO中使用事務(wù)(Transaction)
- php下pdo的mysql事務(wù)處理用法實(shí)例
- PHP基于PDO實(shí)現(xiàn)的SQLite操作類【包含增刪改查及事務(wù)等操作】
- php PDO實(shí)現(xiàn)的事務(wù)回滾示例
- php的PDO事務(wù)處理機(jī)制實(shí)例分析
- php pdo連接數(shù)據(jù)庫(kù)操作示例
相關(guān)文章
PHP中$_SERVER的詳細(xì)參數(shù)與說明介紹
PHP編程中經(jīng)常需要用到一些服務(wù)器的一些資料,特把$_SERVER的詳細(xì)參數(shù)整理下,方便以后使用2013-10-10php基于session實(shí)現(xiàn)數(shù)據(jù)庫(kù)交互的類實(shí)例
這篇文章主要介紹了php基于session實(shí)現(xiàn)數(shù)據(jù)庫(kù)交互的類,實(shí)例分析了php結(jié)合session操作數(shù)據(jù)庫(kù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08巧用php中的array_filter()函數(shù)去掉多維空值的代碼分享
在我們開發(fā)過程中,判斷數(shù)組為空時(shí)你會(huì)想到什么方法呢?首先想到的應(yīng)該是empty函數(shù),不過直接用empty函數(shù)判斷為空是不對(duì)的,因?yàn)楫?dāng)這個(gè)值是多維數(shù)的時(shí)候,empty結(jié)果是有值的2012-09-09PHP實(shí)現(xiàn)的超長(zhǎng)文本分頁(yè)顯示功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的超長(zhǎng)文本分頁(yè)顯示功能,涉及php針對(duì)字符串的計(jì)算、截取、遍歷等相關(guān)操作技巧,可實(shí)現(xiàn)針對(duì)超長(zhǎng)文本的分頁(yè)顯示功能,需要的朋友可以參考下2018-06-06解析VS2010利用VS.PHP插件調(diào)試PHP的方法
以下是對(duì)VS2010利用VS.PHP插件調(diào)試PHP的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-07-07