찾다
php教程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  对事务的处理比较简单,涉及到业务中多个数据操作,就可以考虑用事务处理

 

 

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
thinkphp是不是国产框架thinkphp是不是国产框架Sep 26, 2022 pm 05:11 PM

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列Apr 20, 2022 pm 01:07 PM

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp的mvc分别指什么thinkphp的mvc分别指什么Jun 21, 2022 am 11:11 AM

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

thinkphp 怎么查询库是否存在thinkphp 怎么查询库是否存在Dec 05, 2022 am 09:40 AM

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

实例详解thinkphp6使用jwt认证实例详解thinkphp6使用jwt认证Jun 24, 2022 pm 12:57 PM

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

一文教你ThinkPHP使用think-queue实现redis消息队列一文教你ThinkPHP使用think-queue实现redis消息队列Jun 28, 2022 pm 03:33 PM

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展插件有哪些thinkphp扩展插件有哪些Jun 13, 2022 pm 05:45 PM

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

thinkphp3.2怎么关闭调试模式thinkphp3.2怎么关闭调试模式Apr 25, 2022 am 10:13 AM

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.