萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php使用PDO事務配合表格讀取大量數據插入操作實現方法

php使用PDO事務配合表格讀取大量數據插入操作實現方法

本文介紹了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屬性,但不進行其他任何操作。

copyright © 萬盛學電腦網 all rights reserved