实例262:使用事务处理技术实现银行的安全转账
这是一个事务处理的实例
录像位置:光盘\mingrisoft\09\266
实例说明
在实现银行转账过程中,发生意外是在所难免的,为了避免因意外而造成不必要的损失,在银行转账时经常使用事务处理方式。运行本实例,如图9.20所示,在图中的文本框中输入要转给B账户的金额后,单击“转账”按钮即可实现转账。
 |
| 图9.20 银行转账 |
技术要点
本实例的关键技术是如何应用PHP的事务处理机制处理转账过程中可能遇到的意外。事务处理方式是个不错的选择。本实例应用事务处理技术实现转账的代码如下:
$tob=$_POST[tob]; include_once("conn.php"); $conn->autocommit(false); if(!$conn->query("update tb_zy set money=money-'".$tob."' where flag='mrsoft'")) { $conn->rollback(); } if(!$conn->query("update tb_zy set money=money+'".$tob."' where flag='mr'")) { $conn->rollback(); } $conn->commit(); $conn->autocommit(true); echo "<SCRIPT>window.location.href='index.php';</SCRIPT>"; ?> |
首先调用mysqli类的autocommit()方法关闭数据库的自动提交,然后减少A账户一定数量的金额,并判断查询是否顺利执行,如果在此过程中发生意外,则通过调用mysqli类的rollback()方法回滚,不做任何处理,反之为B账户增加相同的金额。最后通过调用mysqli类的commit()方法提交查询,实现转账。
实现过程
(1)利用mysqli扩展技术实现与MySQL数据库的连接。代码如下:
$conn=new mysqli("localhost","root","root","db_database09"); $conn->query("set names gb2312"); ?> |
(2)查询A账户与B账户的现有金额并在页面中显示。代码如下:
include_once("conn.php"); $sql=$conn->query("select * from tb_zy where flag='mrsoft'"); $info=$sql->fetch_array(MYSQLI_ASSOC); $sql1=$conn->query("select * from tb_zy where flag='mr'"); $info1=$sql1->fetch_array(MYSQLI_ASSOC); ?> |
举一反三
根据本实例,读者可以:
实现多用户同时转账。
实现自动转账。
【责任编辑:
雪花 TEL:(010)68476606】