首页 > 龟鳖养殖 > 文章

PHP商城数据库安全事务处理方法

2019-06-11 来源:本站

PHP商城数据库安全事务处理方法

  现在是一个电商时代,做电商的首先得有一个商城,所以商城的安全也是不容忽视的,一个数据安全的商城离不开数据库的事务处理,商城在资金、商品、下单、结账等重要步骤加上事务控制这是不一定不可少的,像市场上的一些开源商城我都有去研究,基本像DSMall开源商城之类的这方面都做的很好。   程序员独立开发商城也要注意这方面的事情,现在我这边就介绍下PHP操作MySQL事务的方法,分享给大家供大家参考。 具体方法如下:  一般来说,事务都应该具备ACID特征。 所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以“银行转帐”为例来分别说明一下它们的含义:  ①原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。

换句话说,事务是不可分割的最小单元。

比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。

  ②一致性:在事务处理执行前后,数据库是一致的。

也就是说,事务应该正确的转换系统状态。

比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。

  ③隔离性:一个事务处理对另一个事务处理没有影响。

就是说任何事务都不可能看到一个处在不完整状态下的事务。 比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。

  ④持续性:事务处理的效果能够被永久保存下来。

反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。 比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。   在PHP中,mysqli已经很好的封装了mysql事务的相关操作。

如下示例:  $sql1="updateUsersetScoreCount=ScoreCount+10whereID=123456";  $sql2="updateScoreDetailsetFScore=300whereID=123456";  $sql3="insertintoScoreDetailID,Score)values(123456,60)";  $mysqli=newmysqli(localhost,root,,DB_Lib2Test);  $mysqli-autocommit(false);//开始事物  $mysqli-query($sql1);  $mysqli-query($sql2);  if(!$mysqli-errno){  $mysqli-commit();  echook;  }else{  echoerr;  $mysqli-rollback();  }  在这里,我们再使用phpmysql系列函数执行事务。

  $sql1="updateUsersetScoreCount=ScoreCount+10whereID=123456";  $sql2="updateScoreDetailsetFScore=300whereID=123456";  $sql3="insertintoScoreDetailID,Score)values(123456,60)";  $conn=mysql_connect(localhost,root,);  mysql_select_db(DB_Lib2Test);  mysql_query(starttransaction);  //mysql_query(SETautocommit=0);  mysql_query($sql1);  mysql_query($sql2);  if(mysql_errno()){  mysql_query(rollback);  echoerr;  }else{  mysql_query(commit);  echook;  }  //mysql_query(SETautocommit=1);  //mysql_query($sql3);。