thinkphp transaction rollback processing and original PHP transaction rollback example

WBOY
Release: 2016-08-08 09:26:39
Original
950 people have browsed it

1. To support transactions in the program, the database and data table connected must first support transactions mysql. For example:

Database InnoDB supports transactions

Data tables support transactions: InnoDB supports transactions

2. Framework thinkphp supports transaction code

<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>
Copy after login

3. Original PHP code transaction example

Method 1: Only supports the case where the database and data table are both 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>
Copy after login

Method 2: (Note: For MyISAM engine databases that do not support transactions, you can use the table locking method)

<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>
Copy after login

php + mysql is relatively simple to process transactions. If it involves multiple data operations in the business, you can consider using transaction processing.


The above introduces the transaction rollback processing of thinkphp and the transaction rollback example of original PHP, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!