PHP mysqli学习(六)事物

autocommit(0) 关闭事务自动提交

commit() 提交

rollback() 回滚

<?php
header(‘content-type:text/html;charset=utf-8‘);
$mysqli = @new mysqli(‘localhost:3306‘, ‘root‘, ‘root‘, ‘zhy‘);
if ($mysqli->connect_errno) {
    die(‘mysqli connect error : ‘ . $mysqli->connect_error);
}
$mysqli->set_charset(‘utf8‘);

$mysqli->autocommit(FALSE);

$sql_add = ‘update account set money = money + 100 WHERE username = "user1"‘;
$sql_reduce = ‘update account set money = money - 100 WHERE username = "user2"‘;

$res_add = $mysqli->query($sql_add);
$rows_add = $mysqli->affected_rows;
$res_reduce = $mysqli->query($sql_reduce);
$rows_reduce = $mysqli->affected_rows;

if($res_add && $res_reduce && $rows_add>0 && $rows_reduce>0){
    $mysqli->commit();
    echo ‘转账成功<br/>‘;
    $mysqli->autocommit(TRUE);
}else{
    $mysqli->rollback();
    echo ‘转账失败<br/>‘;
}

$mysqli->close();
时间: 2024-10-05 08:28:45

PHP mysqli学习(六)事物的相关文章

C#多线程学习(六) 互斥对象

C#多线程学习(六) 互斥对象 如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先等车,然后上车,最后下车.当一个乘客在车上时,其他乘客就只有等他下车以后才可以上车.而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放了,它就自动拥有这个对象,直到它调用Mute

Beaglebone Back学习六(Can总线测试)

Can总线测试 1 Can总线 控制器局域网 (Controller Area Network, 简称 CAN 或 CANbus)是一种通信协议,其特点是允许网络上的设备直接互相通信,网络上不需要主机(Host)控制通信.是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898).CAN总线原理是通过CAN总线.传感器.控制器和执行器由串行数据线连接起来.它不仅仅是将电缆按树形结构连接起来,其通信协议相当于ISO/OSI参考模型中的数据链路层,网络可根据协

JBPM学习(六):详解流程图

概念: 流程图的组成: a. 活动 Activity / 节点 Node b. 流转 Transition / 连线(单向箭头) c. 事件 1.流转(Transition) a) 一般情况一个活动中可以指定一个或多个Transition i. 开始活动(Start)中只能有一个Transition. ii. 结束活动(End)中没有Transition. iii. 其他活动中有一条或多条Transition b) 如果Transition只有一个,则可以不指定名称(名称是null):如果有多个

Cmdlet开发与学习(六)

之前的内容主要是关于cmdlet开发的,下面要将的内容,是关于在应用程序中集成PowerShell引擎. 运行空间和管道       Runspace类是PowerShell引擎API的重要组成部分,Runspace实例代表一个PowerShell执行引擎实例,其中包含自己的一系列变量,驱动器映射,函数等.这些资源统称为运行空间的"会话状态". 创建并调用Pipeline类的实例,我们就可以在运行空间中使用命令行.Pipeline类实例代表PowerShell命令行对象,其中包含各种命

程序设计入门学习六步曲

初学者遇到最多的困惑是:上课也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的语法知识,而我们编写的程序或软件是要根据要解决问题的实际需要控制程序的流程,如果你没有深刻地理解C语言的语句的执行过程(或流程),你怎么会编写程序解决这些实际问题呢? 二.用C语言编程解决实际问题,所需要的不仅仅是C语言的编程知识,还需要相关的专业知识.例如,如果你不知道长方形的面积公式,即使C语言学得再好你也编不出求长方形的面积的程

Spark学习六:spark streaming

Spark学习六:spark streaming 标签(空格分隔): Spark Spark学习六spark streaming 一概述 二企业案例分析 三Spark streaming的工作原理 四textFileStreaming的应用 四企业中的开发方式 五总结 一,概述 一个简单的实例 1,安装nc nc -lk 9999 2,启动应用 ./bin/run-example streaming.NeworkWordCount localhost 9999 二,企业案例分析 需求: 实时统计

TweenMax动画库学习(六)

目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            TweenMax动画库学习(四)            TweenMax动画库学习(五)              TweenMax动画库学习(六)  上一节我们主要聊了TweenMax动画库中的currentLabel():获取当前状态.getLabelAfter():获取下一个状态.getLabel

springMVC3学习(六)--SimpleFormController

SimpleFormController提交表单流程例如以下: login.jsp <form action="login" method="post"> 用户名:<input type="text" name="username"/></br> 密码:<input type="password" name="password"/><

Oracle学习(六):子查询

1.知识点:可以对照下面的录屏进行阅读 SQL> --子查询所要解决的问题:问题不能一步求解 SQL> --查询工资比SCOTT高的员工信息 SQL> --(1)使用普通方法 SQL> --1. SCOTT的工资 SQL> select sal from emp where ename='SCOTT'; SQL> --2. 查询比3000高的员工 SQL> select * 2 from emp 3 where sal>3000; SQL> --(2)

Jetty学习六:配置连接器

连接器配置概览 连接器用于接收网络连接,配置一个连接器需要配置: 1)连接器的网络参数(例如:端口): 2)连接器使用的服务(例如:executors,schedulers): 3)为接收连接而初始化和配置协议的连接工厂. Jetty主要使用的连接器类型为ServerConnector. 标准Jetty发布使用下面的Jetty XML文件创建和配置连接器: 1)jetty-http.xml 初始化一个ServerConnector,用于接收HTTP连接(可以被升级到WebSocket连接). 2