国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

PDO的安全處理與事物處理方法

2024-05-04 23:51:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

事務(wù) (Transaction) 是操作數(shù)據(jù)庫(kù)中很重要的一個(gè)功能, 它可以讓你預(yù)定一條, 或者一系列 SQL 語(yǔ)句, 然后一起執(zhí)行,并且在執(zhí)行的過(guò)程中, 如果其中的某條執(zhí)行失敗, 可以回滾所有已更改的操作. 如果執(zhí)行成功, 那么這一系列操作都會(huì)永久有效. 事務(wù)很好的解決了在操作數(shù)據(jù)庫(kù)的時(shí)候不同步的問(wèn)題. 同時(shí), 通過(guò)事務(wù)去執(zhí)行大數(shù)據(jù)量的時(shí)候, 執(zhí)行效率可以提高很多很多.

事務(wù)處理具有四個(gè)特性:原子性、一致性、獨(dú)立性、持久性。并不是所有的數(shù)據(jù)庫(kù)都支持事務(wù)處理的,PDO 為能夠執(zhí)行事務(wù)處理的數(shù)據(jù)庫(kù)提供事務(wù)支持。

一.PDO異常處理
PDO::ATTR_ERRMODE

1) PDO::ATTR_ERRMODE//不報(bào)錯(cuò)誤(忽略)(0)

2) PDO::ERRMODE_WARNING
//以警告的方式報(bào)錯(cuò)(1)

3) PDO::ERRMODE_EXCEPTION  //以異常的方式報(bào)錯(cuò)(2)

<?php //默認(rèn)是PDO::ATTR_ERRMODE 不報(bào)錯(cuò)誤(忽略)(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語(yǔ)句,返回PDOStatement對(duì)象

2) bindValue()  //將值綁定到對(duì)應(yīng)的一個(gè)參數(shù),返回布爾值

3) bindParam()  //將參數(shù)綁定到相應(yīng)的查詢占位符上,返回布爾值

4) bindColumn() //用來(lái)匹配列名和一個(gè)指定的變量名

5) execute()    // 執(zhí)行一個(gè)準(zhǔn)備好了的預(yù)處理語(yǔ)句,返回布爾值

6) rowCount() // 返回使用增、刪、改、查操作語(yǔ)句后受影響的行總數(shù)

<?php /**  * ?號(hào)式的預(yù)處理語(yǔ)句,共有三種綁定方式  */  //1.連接數(shù)據(jù)庫(kù) try{   $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){   die("fail to connect db".$e->getMessage()); }  //2.預(yù)處理的SQL語(yǔ)句 $sql="INSERT INTO users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql);  //3.對(duì)?號(hào)的參數(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ù)處理語(yǔ)句,共有三種綁定方式  */  //1.連接數(shù)據(jù)庫(kù) try{   $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){   die("fail to connect db".$e->getMessage()); }  //2.預(yù)處理的SQL語(yǔ)句 $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ù)庫(kù) 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()     //開(kāi)啟一個(gè)事物(做一個(gè)回滾點(diǎn))

2) commit() 
   //提交事務(wù)

3) rollBack()            //事務(wù)回滾操作

<?php //1.連接數(shù)據(jù)庫(kù) 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{   //開(kāi)啟事物   $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(); } 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 秦安县| 佛教| 新昌县| 九龙坡区| 潍坊市| 西平县| 冷水江市| 始兴县| 宝清县| 山东省| 防城港市| 衡东县| 宜兰市| 北京市| 中超| 兴安县| 广州市| 蛟河市| 东阿县| 武夷山市| 祁东县| 宾川县| 昔阳县| 获嘉县| 阳新县| 南宫市| 和平区| 兴化市| 临武县| 冷水江市| 罗山县| 阳春市| 南召县| 霞浦县| 深泽县| 双流县| 南涧| 四平市| 平江县| 离岛区| 屏边|