您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)PDO中安全處理與事物處理的示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
事務(wù) (Transaction) 是操作數(shù)據(jù)庫中很重要的一個功能, 它可以讓你預(yù)定一條, 或者一系列 SQL 語句, 然后一起執(zhí)行,并且在執(zhí)行的過程中, 如果其中的某條執(zhí)行失敗, 可以回滾所有已更改的操作. 如果執(zhí)行成功, 那么這一系列操作都會永久有效. 事務(wù)很好的解決了在操作數(shù)據(jù)庫的時候不同步的問題. 同時, 通過事務(wù)去執(zhí)行大數(shù)據(jù)量的時候, 執(zhí)行效率可以提高很多很多.
事務(wù)處理具有四個特性:原子性、一致性、獨(dú)立性、持久性。并不是所有的數(shù)據(jù)庫都支持事務(wù)處理的,PDO 為能夠執(zhí)行事務(wù)處理的數(shù)據(jù)庫提供事務(wù)支持。
一.PDO異常處理
PDO::ATTR_ERRMODE
1) PDO::ATTR_ERRMODE//不報錯誤(忽略)(0)
2) PDO::ERRMODE_WARNING
//以警告的方式報錯(1)
3) PDO::ERRMODE_EXCEPTION //以異常的方式報錯(2)
<?php //默認(rèn)是PDO::ATTR_ERRMODE 不報錯誤(忽略)(0),需要用errorCode()、errorInfo() try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); // $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } $sql="INSERT INTO user VALUES(null,'dabao','26')"; try{ $res=$pdo->exec($sql); }catch (PDOException $e){ echo $e->getMessage(); } //$res=$pdo->exec($sql); //if($res){ // echo 'OK'; //}else{ // echo $pdo->errorCode(); // echo '<br/>'; // print_r($pdo->errorInfo()); //}
二.PDO預(yù)處理方法
1) prepare() //用于執(zhí)行查詢SQL語句,返回PDOStatement對象
2) bindValue() //將值綁定到對應(yīng)的一個參數(shù),返回布爾值
3) bindParam() //將參數(shù)綁定到相應(yīng)的查詢占位符上,返回布爾值
4) bindColumn() //用來匹配列名和一個指定的變量名
5) execute() // 執(zhí)行一個準(zhǔn)備好了的預(yù)處理語句,返回布爾值
6) rowCount() // 返回使用增、刪、改、查操作語句后受影響的行總數(shù)
<?php /** * ?號式的預(yù)處理語句,共有三種綁定方式 */ //1.連接數(shù)據(jù)庫 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2.預(yù)處理的SQL語句 $sql="INSERT INTO users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql); //3.對?號的參數(shù)進(jìn)行綁定 $id=null; $name="test103"; $age=103; //第一種綁定方式 //$stmt->bindValue(1,$id); //$stmt->bindValue(2,$name); //$stmt->bindValue(3,$age); //第二種綁定方式 //$stmt->bindParam(1,$id); //$stmt->bindParam(2,$name); //$stmt->bindParam(3,$age); //4.執(zhí)行 //$stmt->execute(); //第三種綁定方式:直接執(zhí)行數(shù)組 $stmt->execute(array($id,$name,$age)); echo $stmt->rowCount();
<?php /** * 別名式的預(yù)處理語句,共有三種綁定方式 */ //1.連接數(shù)據(jù)庫 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2.預(yù)處理的SQL語句 $sql="INSERT INTO users(id,name,age) VALUES(:id,:name,:age)"; $stmt=$pdo->prepare($sql); //3.參數(shù)進(jìn)行綁定 $id=null; $name="test203"; $age=23; //第一種綁定方式 //$stmt->bindValue("id",$id); //$stmt->bindValue("name",$name); //$stmt->bindValue("age",$age); //第二種綁定方式 //$stmt->bindParam("id",$id); //$stmt->bindParam("name",$name); //$stmt->bindParam("age",$age); //4.執(zhí)行 //$stmt->execute(); //第三種綁定方式:直接執(zhí)行數(shù)組 $stmt->execute(array("id"=>$id,"name"=>$name,"age"=>$age)); echo $stmt->rowCount();
<?php /** * 用預(yù)處理方式查詢數(shù)據(jù) */ //1.連接數(shù)據(jù)庫 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect mysql".$e->getMessage()); } //2.預(yù)處理查詢 $sql="SELECT id,name,age FROM users"; $stmt=$pdo->prepare($sql); //3.執(zhí)行 $stmt->execute(); foreach($stmt as $val){ echo $val['id']."------".$val['name']."------".$val['age']."<br/>"; }
三.事務(wù)處理操作方法介紹
1) beginTransaction() //開啟一個事物(做一個回滾點(diǎn))
2) commit()
//提交事務(wù)
3) rollBack() //事務(wù)回滾操作
<?php //1.連接數(shù)據(jù)庫 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2.執(zhí)行數(shù)據(jù)操作 try{ //開啟事物 $pdo->beginTransaction(); $sql="insert into users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql); //傳入?yún)?shù) $stmt->execute(array(null,"test1","21")); $stmt->execute(array(null,"test2","22")); $stmt->execute(array(null,"test3","23")); //提交事物 $pdo->commit(); }catch (PDOException $e){ die("fail to execute".$e->getMessage()); //事物回滾 $pdo->roolback(); }
看完上述內(nèi)容,你們對PDO中安全處理與事物處理的示例分析有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。