## 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密碼查看與修改