本篇文章主要介紹了PDO的安全處理與事物處理方法,具有一定的參考價值,有興趣的小夥伴們可以參考一下。
事務(Transaction) 是操作資料庫中很重要的功能, 它可以讓你預定一條, 或一系列SQL 語句, 然後一起執行,並且在執行的過程中, 如果其中的某條執行失敗, 可以回滾所有已更改的操作. 如果執行成功, 那麼這一系列操作都會永久有效. 事務很好的解決了在操作數據庫的時候不同步的問題. 同時, 通過事務去執行大數據量的時候, 執行效率可以提高很多很多.
事務處理具有四個特性:原子性、一致性、獨立性、持久性。並不是所有的資料庫都支援事務處理的,PDO 為能夠執行事務處理的資料庫提供事務支援。
一.PDO異常處理
PDO::ATTR_ERRMODE
1) PDO::ATTR_ERRMODE//不報錯誤(忽略) (0)
2) PDO::ERRMODE_WARNING
//以警告的方式報錯(1)
3) PDO::ERRMODE_EXCEPTION //以異常的方式報錯(2)
<?php //默认是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預處理方法
1 ) prepare() //用來執行查詢SQL語句,傳回PDOStatement物件
2) bindValue() //將值綁定到對應的參數,傳回布林值
3) bindParam() //將參數綁定到對應的查詢佔位符上,傳回布林值
4) bindColumn() //用來符合列名和一個指定的變數名稱
5) execute() // 執行一個已準備好的預處理語句,傳回布林值
6) rowCount() // 回傳使用增、刪、改、查操作語句後受影響的行總數
<?php /** * ?号式的预处理语句,共有三种绑定方式 */ //1.连接数据库 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2.预处理的SQL语句 $sql="INSERT INTO users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql); //3.对?号的参数进行绑定 $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.执行 //$stmt->execute(); //第三种绑定方式:直接执行数组 $stmt->execute(array($id,$name,$age)); echo $stmt->rowCount();
<?php /** * 别名式的预处理语句,共有三种绑定方式 */ //1.连接数据库 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2.预处理的SQL语句 $sql="INSERT INTO users(id,name,age) VALUES(:id,:name,:age)"; $stmt=$pdo->prepare($sql); //3.参数进行绑定 $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.执行 //$stmt->execute(); //第三种绑定方式:直接执行数组 $stmt->execute(array("id"=>$id,"name"=>$name,"age"=>$age)); echo $stmt->rowCount();
<?php /** * 用预处理方式查询数据 */ //1.连接数据库 try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect mysql".$e->getMessage()); } //2.预处理查询 $sql="SELECT id,name,age FROM users"; $stmt=$pdo->prepare($sql); //3.执行 $stmt->execute(); foreach($stmt as $val){ echo $val['id']."------".$val['name']."------".$val['age']."<br/>"; }
三.事務處理操作方法介紹
#1) beginTransaction() //開啟一個事物(做一個回滾點)
2) commit()
//提交事務
3) rollBack() //事務回滾操作
<?php //1.连接数据库 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.执行数据操作 try{ //开启事物 $pdo->beginTransaction(); $sql="insert into users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql); //传入参数 $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(); }
以上就是本文的全部內容,希望對大家的學習有所幫助。
相關推薦:
#
以上是PDO的安全處理與事物處理方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!