PHP + MySQL事务操作的实际应用代码演示

以下的文章主要向大家描述的是PHP(PHP培训 php教程 ) + MySQL(MySQL认证 Mysql培训 )事务操作的实际应用代码演示,我们大家都知道在实际LAMP的应用中,一般PHP所使用的是AdoDB来对MySQL数据库进行操作,下面给出AdoDB相应的代码方便大家查阅:

  startTrans();

  实际,getOne所调用的查询也可以直接放到rowLock来进行,这里只是为了演示效果能更明显些。

  $adodb->rowLock(‘book‘, ‘book_id = 123‘); $bookNumber = $adodb->getOne("SELECT book_number FROM book WHERE book_id = 123"); $adodb->execute("UPDATE book SET book_numberbook_number = book_number - 1 WHERE book_id = 123"); $adodb->completeTrans(); // ... ?>

  其中,rowLock的方法就是调用的FOR UPDATE来实现的行锁,你可能会想把“FOR UPDATE”直接写到$adodb->getOne()调用的那条SQL语句里面去实现行锁的功能,不错,那样确实可以,但是并不是所有的数据库都使用“FOR UPDATE”语法来实现行锁功能,比如Sybase使用“HOLDLOCK”的语法来实现行锁功能,所以为了你的数据库抽象层保持可移植性,我还是劝你用rowLock来实现行锁功能,至于可移植性就交给AdoDB好了,嗯,有点扯远了,今儿就说到这里了。

  上述的相关内容就是对PHP + MySQL事务操作的代码演示的描述,希望会给你带来一些帮助在此方面。

  附:

  AdoDB中存在一个setTransactionMode()方法,能够设置事务的隔离级别,如下:

  SetTransactionMode allows you to pass in the transaction mode to use for all subsequent transactions for that connection session. Note: if you have persistent connections and using mysql or mssql, you might have to explicitly reset your transaction mode at the beginning of each page request. This is only supported in postgresql, mssql, mysql with InnoDB and oci8 currently. For example: $db->SetTransactionMode("SERIALIZABLE"); $db->BeginTrans(); $db->Execute(...); $db->Execute(...); $db->CommiTrans(); $db->SetTransactionMode(""); // restore to default $db->StartTrans(); $db->Execute(...); $db->Execute(...); $db->CompleteTrans(); Supported values to pass in: * READ UNCOMMITTED (allows dirty reads, but fastest) * READ COMMITTED (default postgres, mssql and oci8) * REPEATABLE READ (default mysql) * SERIALIZABLE (slowest and most restrictive)

  以上的相关内容就是对PHP + MySQL事务操作的代码演示的介绍,望你能有所收获。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。