PDO中的事務處理具體介紹
交易(transaction)是由查詢和/或更新語句的序列組成。 用 begin、start transaction開始一個事務,rollback 回滾事務,commit 提交事務。 在開始一個事務後,可以有若干個 SQL 查詢或更新語句,個 SQL遞交執行後,還應該有判斷是否正確執行的語句,以確定下一步是否回滾,若都被正確執行則最後提交事務。一旦交易回滾,資料庫則保持開始交易前狀態。就好像一個被編輯的文件不存檔退出,自還是保持文件原來的樣子。所以,事務可視為原子操作,事務中的 SQL,要嘛全部執行,要不一句都不執行。
在前兩篇文章《PDO中錯誤處理的方法一-errorCode()方法》,《PDO中錯誤處理的方法二-errorInfo()方法》我們介紹了PDO中處理錯誤的方法,那麼我們來具體介紹一下PDO中的事務處理~
#在PDO 中同樣可以實現事務處理的功能,其應用的方法如下:
(1) 開啟事務-beginTransaction()方法。
beginTransaction()方法將關閉自動提交(autocommit)模式,直到交易提交或回滾以後才恢復。
(2)提交交易-commit()方法
commit()方法完成交易的提交操作,成功回傳true,否則傳回false。
(3)事務回滾-rollBack()方法
rollBack()方法執行交易的回溯操作。
透過prepare()和execute()方法在資料庫中新增數據,並且透過事務處理機制確保資料能夠正確的新增到資料庫中,具體步驟如下:
建立一個php文件,先定義資料庫連線參數,建立try{...}catch{...}語句,在try{}語句中實例化PDO建構函數,完成與資料庫的連接,並且透過beginTransaction()方法開啟事務,然後定義INSERT 新增語句,透過$_POST[]方法取得表單中提交的數據,透過prepare()和execute()方法向資料庫中新增數據,並且透過commit(0方法完成交易的提交操作,最後在catch{}語句中傳回錯誤訊息,並且透過rollBack()方法執行交易的回滾操作,具體程式碼如下:
<form action="3.php" name="form1" method="post"> 用户名:<input type="text" name="username"> 密码: <input type="password" name="password"> <input type="submit" name="Submit" value="提交"> </form> <?php header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $name =$_POST['username']; $password =$_POST['password']; if($_POST['username']!=""&&$_POST['password']!=""){ $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo -> beginTransaction(); //开始事务 $query="insert into `user`(username,password) VALUES ('$name','$password')";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res->execute(); //执行查询语句,并返回结果集 if($res->errorCode()){ echo "数据添加成功"; }else{ echo "数据添加失败"; } $pdo->commit(); //执行事务的提交操作 }catch (PDOException $e){ die("Error!:".$e->getMessage().'<br>'); $pdo -> rollBack(); //执行事务的回滚 } } ?>
最後輸出的結果如下:
看了我們上面介紹的事務處理,小夥伴是不是覺得很簡單,大家可以聯絡一下,鞏固一下自己所學的東西,下一篇我們將繼續介紹PDO中的儲存過程,具體請閱讀《PDO中的預存程序的詳細介紹》!
以上是PDO中的事務處理具體介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!