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
1 2 3 4 5 6 7 | <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> else </span><span>{ </span><span> $model1 </span>->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
1 2 3 4 5 6 7 8 9 10 11 | <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)
1 2 3 4 5 6 7 8 9 10 11 12 | <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>
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>
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.