search
Homephp教程php手册thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例,thinkphp实例

thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例,thinkphp实例

1.  要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql   为例:

数据库InnoDB支持 transactions

 

数据表支持事务:InnoDB  支持transaction

2. 框架thinkphp  支持事务代码

<span>public</span> <span>function</span><span> testrollback(){
</span><span>$model1</span> = D('item'<span>);
</span><span>$model2</span> = D('vote'<span>);
</span><span>$model1</span>-><span>startTrans();
</span><span>$res1</span> = <span>$model1</span>->where('id = 5')-><span>delete();
</span><span>$res2</span> = <span>$model2</span>->where('id = 2')-><span>delete();
dump(</span><span>$res1</span><span>);
dump(</span><span>$res2</span><span>);
</span><span>if</span>(<span>$res1</span> && <span>$res2</span><span>){
</span><span>$model1</span>->commit();   <span>//</span><span>只有$res1 和  $res2  都执行成功是才真正执行上面的数据库操作</span>
dump("commit"<span>);
}</span><span>else</span><span>{
</span><span>$model1</span>->rollback();  <span>//</span><span>  条件不满足,回滚</span>
dump("rollback"<span>);
}
dump(</span>"over"<span>);
</span><span>exit</span><span>;
}</span>

 

 

 

3.  原始PHP 代码事务实例

方法一:只支持数据库和数据表都是 innoDB  的情况

<span>public</span> <span>function</span><span>  rollbackoriginal1(){
        </span><span>$conn</span> = <span>mysql_connect</span>('127.0.0.1','summerzi','summerzi') or <span>die</span>('DB connection failed!'<span>);
        </span><span>mysql_select_db</span>('summer',<span>$conn</span><span>);
        </span><span>mysql_query</span>('set names "GBK"'<span>);
        </span><span>mysql_query</span>('BEGIN'<span>);
        </span><span>$sql1</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(41,1,233);"<span>;
        </span><span>$sql2</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(fdfd,2,235);"<span>;
        </span><span>$res1</span> = <span>mysql_query</span>(<span>$sql1</span><span>);
        </span><span>$res2</span>  = <span>mysql_query</span>(<span>$sql2</span><span>);
        dump(</span><span>$sql1</span><span>);
        dump(</span><span>$sql2</span><span>);
        dump(</span><span>$res1</span><span>);
        dump(</span><span>$res2</span><span>);
        </span><span>if</span>(<span>$res1</span> && <span>$res2</span><span>){
            </span><span>mysql_query</span>('COMMIT'<span>);
            dump(</span>'commit success!'<span>);
        }</span><span>else</span><span>{
            </span><span>mysql_query</span>('ROLLBACK'<span>);
            dump(</span>'commit failed, rollback!'<span>);
        }
        </span><span>mysql_query</span>('END'<span>);

    }</span>

方法二:(注意:对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法)

<span>public</span> <span>function</span><span> rollbackoriginal2(){
        </span><span>$conn</span> = <span>mysql_connect</span>('127.0.0.1','summerzi','summerzi') or <span>die</span>('DB connection failed!'<span>);
        </span><span>mysql_select_db</span>('summer',<span>$conn</span><span>);
        </span><span>mysql_query</span>('set names "GBK"'<span>);
        </span><span>mysql_query</span>('SET AUTOCOMMIT=0');<span>//</span><span>//设置mysql不自动提交,需自行用commit语句提交</span>
        <span>$sql1</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(41,1,233);"<span>;
        </span><span>$sql2</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(44,2,235);"<span>;
        </span><span>//</span><span>mysql_query("LOCK TABLES `hmbl_userdata` WRITE");//锁定表</span>
        <span>$res1</span> = <span>mysql_query</span>(<span>$sql1</span><span>);
        </span><span>$res2</span>  = <span>mysql_query</span>(<span>$sql2</span><span>);
        dump(</span><span>$sql1</span><span>);
        dump(</span><span>$sql2</span><span>);
        dump(</span><span>$res1</span><span>);
        dump(</span><span>$res2</span><span>);
        </span><span>//</span><span>mysql_query("UNLOCK TABLES");//解除锁定</span>
        <span>if</span>(<span>$res1</span> && <span>$res2</span><span>){
            </span><span>mysql_query</span>('COMMIT'<span>);
            dump(</span>'commit success!'<span>);
        }</span><span>else</span><span>{
            </span><span>mysql_query</span>('ROLLBACK'<span>);
            dump(</span>'commit failed, rollback!'<span>);
        }
        </span><span>mysql_query</span>("SET AUTOCOMMIT=1"<span>);
        </span><span>mysql_query</span>('END'<span>);
        

    }</span>

php + mysql  对事务的处理比较简单,涉及到业务中多个数据操作,就可以考虑用事务处理

 

 

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor