查看完整版本: 用新PHP插件实现MySQL为基础的事务

lily 2007-8-1 22:17

用新PHP插件实现MySQL为基础的事务

             <p><p>事务处理支持很长时间以来一直是大多数<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'MySQL');" target="_self"><u><strong>MySQL</strong></u></a>开发者的心愿,随着MySQL4.0的发布,这个心愿最后终于得以实现。MySQL 4.0后不久,拥有一个新的MySQL插件的<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'PHP');" target="_self"><u><strong>PHP</strong></u></a> 5.x也发布了。这个新插件,MySQLImproved,使得PHP开发者通过利用本地的PHP函数,获得了这些新的事务处理能力。这篇简短的教程将向你说明怎样利用这些新的MySQLi函数,用PHP实现以MySQL为基础的事务。 </p><p>概要 </p><p>如果你还不知道,那么我可以告诉你,事务只是一组SQL语句,通常因为它们是彼此相互依赖的,所以要在全有或全无(all-or-nothing)的模式下执行。只有当所有组成的语句都执行成功了,一个事务才算是成功了;任何一个语句中的失败应该都会导致系统“回滚”到它先前的状态,以避免数据连接/崩溃问题。 </p><p>对于这一点,两个银行帐户间的转帐是一个很好的例子。在<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" target="_self"><u><strong>数据库</strong></u></a>级,这样的转帐包括两个步骤:首先,从源帐户中扣除转帐的金额,然后将其加到目标帐户中。如果在第二步中发生了错误,那么第一步就必须被取消,以避免不相符的情况(和愤怒的客户聚众滋事)。事务安全系统将自动地撤到系统先前的“快照”。</p><p>大多数数据库(包括MySQL)通过一个命令的组合来完成这个: </p><p>* START TRANSACTION命令标志着一个新的事务组的开始。它后面常接一系列的SQL命令。 </p><p>* COMMIT命令标志着一个事务组的结束,表示事务期间做的所有改变应该被提交或者使之永久化。 </p><p>* ROLLBACK命令标志着一个事务组的结束,表示事务期间所做的所有改变应该被撤消。 </p><p>PHP中的事务处理函数 </p><p>PHP中的MySQLi插件引进了新的函数,帮助开发者利用MySQL的事务处理能力。实质上,这些函数对等地被叫做SQL START TRANSACTION,COMMIT和 ROLLBACK命令。列表A为你展示了一个例子,列表A: </p><p><br>   </p><p>  // connect to database</p><p>  $dbh = mysqli_connect($host, $user, $pass, $db);</p><p>  // turn off auto-commit</p><p>  mysqli_autocommit($dbh, FALSE);</p><p>  // run query 1</p><p>  $result = mysqli_query($dbh, $query1);</p><p>  if ($result !== TRUE) {</p><p>  mysqli_rollback($dbh); // if error, roll back transaction</p><p>  }</p><p>  // run query 2</p><p>  $result = mysqli_query($dbh, $query2);</p><p>  if ($result !== TRUE) {</p><p>  mysqli_rollback($dbh); // if error, roll back transaction</p><p>  }</p><p>  // and so on...</p><p>  // assuming no errors, commit transaction</p><p>  mysqli_commit($dbh);</p><p>  // close connection</p><p>  mysqli_close($dbh);</p><p>  ?&gt;<br>&nbsp;</p><p>在PHP 中执行一项事务有三个基本的步骤: </p><p>*第一步是始终关掉数据库的“auto-commit”,它实质上意味着系统在你作出改变时就保存它们。这一点是很重要的,因为在一个事务处理环境中,你应该只有在确定了所有事务处理的“unit”都成功完成了以后,才保存你所做的改变。你可以通过mysqli_autocommit()函数关掉数据库的自动提交。 </p><p>*接下来,通过mysqli_query()函数,继续用通常的<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%B7%BD%B7%A8');" target="_self"><u><strong>方法</strong></u></a>进行INSERT、UPDATE和/或DELETE查询。检验每一个查询返回的值,弄清楚它是否成功了是很重要的。如果其中任何一个查询失败了,mysqli_rollback()函数就会被用来将系统返回到事务进行之前的状态。 </p><p>* 假设组成事务组的所有命令都成功执行了,就要用mysqli_commit()函数将变化保存到数据库系统。请注意,一旦这个函数被调用,事务就不能被撤消了。 <br></p><div>
页: [1]
查看完整版本: 用新PHP插件实现MySQL为基础的事务
PageRank