## PDO 事务处理
**PDO** 事务对象方法
| 方法 | 描述 |
| -- | -- |
| `beginTransaction()` | 启动一个事务 |
| `commit()` | 提交一个事务 |
| `rollBack()` | 回滚一个事务 |
| `inTransaction()` | 检测是否在一个事务内 |
> 注意:当需要使用事务的时候,数据库表引擎不能是 `MyISAM` ,必须要是 `InnoDB`。
```
<?php
try {
$host = 'mysql:host=localhost;dbname=test';
$pdo = new PDO($host, 'root', 'aaaaaa', [PDO::ATTR_AUTOCOMMIT => 0]);
// 建表 SQL
$sql = <<<EOF
CREATE TABLE IF NOT EXISTS user_account(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
money DECIMAL(8,2) NOT NULL,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET UTF8 COMMENT "用户账户表";
EOF;
$pdo->exec($sql); // 使用 PDO 对象的 exec()方法执行建表语句
/*$sql = 'INSERT INTO user_account (username, money) VALUES (:username, :money),(:username2, :money2)';
$statement = $pdo->prepare($sql); // 预处理 SQL
$statement->bindParam(':username', $username, PDO::PARAM_STR);
$statement->bindParam(':money', $money);
$statement->bindParam(':username2', $username2, PDO::PARAM_STR);
$statement->bindParam(':money2', $money2);
$username = 'luo';
$money = 3000.00;
$username2 = 'li';
$money2 = 3000.00;
$statement->execute(); // 执行预处理*/
// 开启事务
$pdo->beginTransaction();
$res = $pdo->exec('UPDATE user_account SET money = money - 2000 WHERE username = "li"');
if ($res == 0) {
throw new PDOException('li 转账失败');
}
$res2 = $pdo->exec('UPDATE user_account SET money = money + 2000 WHERE username = "luo"');
if ($res2 == 0) {
throw new PDOException('luo 接受转账失败');
}
$pdo->commit();
} catch (PDOException $e) {
echo $e->getMessage();
}
```
- 写在前面
- MySQL的使用
- MySQL多表同时删除方案
- MySQL跨表、多表更新SQL语句总结
- MySQL存储引擎
- 安装
- 常规方式编译安装MySQL
- 采用cmake方式编译安装MySQL
- 使用rpm包安装MySQL
- 使用yum方式安装MySQL
- 采用二进制方式免编译安装MySQL
- 多实例的安装
- 什么是多实例
- 多实例的作用、问题以及应用场景
- 多实例安装01【推荐】
- 多实例官方安装方案02
- 启动、用户和权限管理
- 单实例MySQL的启动和关闭的方法
- 设置及修改MySQL root用户密码
- 找回丢失的MySQL root用户密码
- 创建MySQL用户及用户权限管理
- 基础命令的操作
- MySQL库和表相关操作
- MySQL中的索引操作
- MySQL常用命令
- MySQL的错误代码
- MySQL复习秘籍
- 备份与恢复
- 备份
- 恢复
- mysqlbinlog命令
- 服务日志
- 主从复制
- 主从复制部署配置问题汇总
- 主从复制读写分离
- 灾难恢复
- 配置phpmyadmin连接多实例MySQL
- 其他相关
- Sphinx实验
- 中文分词技术
- MySQL语句大全
- 用户创建、权限、删除
- 数据库与表显示、创建、删除
- 表复制及备份还原
- 数据库表中数据操作
- 修改表的列与表名
- 修改表中的数据
- 查询表
- 日志
- 批量修改Mysql表引擎为InnoDB的方法
- 数据库抽象层 PDO
- PDO对象常用方法
- PDO 事务处理
- PDO 与 MySQLi 二者效率简单比较
- 大小写敏感性 lower_case_table_names
- CentOS7安装MySQL5.7密码查看与修改