Heim > Backend-Entwicklung > PHP-Tutorial > Thinkphp-Transaktions-Rollback-Verarbeitung und ursprüngliches PHP-Transaktions-Rollback-Beispiel

Thinkphp-Transaktions-Rollback-Verarbeitung und ursprüngliches PHP-Transaktions-Rollback-Beispiel

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-08 09:26:39
Original
1039 Leute haben es durchsucht

1. Um Transaktionen im Programm zu unterstützen, müssen die Datenbank und die Datentabelle zunächst MySQL-Transaktionen unterstützen. Zum Beispiel:

Die Datenbank InnoDB unterstützt Transaktionen

Datentabellen unterstützen Transaktionen: InnoDB unterstützt Transaktionen

2. Framework thinkphp unterstützt Transaktionscode

<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>
Nach dem Login kopieren

3. Original-PHP-Code-Transaktionsbeispiel

Methode 1: Unterstützt nur den Fall, dass die Datenbank und die Datentabelle beide innoDB sind

<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>
Nach dem Login kopieren

Methode 2: (Hinweis: Für MyISAM-Engine-Datenbanken, die keine Transaktionen unterstützen, können Sie die Tabellensperrmethode verwenden.)

<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>
Nach dem Login kopieren

Die Transaktionsverarbeitung von PHP MySQL ist relativ einfach. Wenn mehrere Datenvorgänge im Unternehmen erforderlich sind, können Sie die Verwendung der Transaktionsverarbeitung in Betracht ziehen.


Das Obige stellt die Transaktions-Rollback-Verarbeitung von thinkphp und das Transaktions-Rollback-Beispiel von Original-PHP vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die an PHP-Tutorials interessiert sind.

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
So ändern Sie MySQL in MySQL
Aus 1970-01-01 08:00:00
0
0
0
MySQL-Startfehler unter Centos
Aus 1970-01-01 08:00:00
0
0
0
MySQL stoppt den Prozess
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage