mysql pdo 中文手册_PDO 事务处理 - MySQL 中文参考手册

PDO 事务处理

PDO 事务对象方法

方法

描述

beginTransaction()

启动一个事务

commit()

提交一个事务

rollBack()

回滚一个事务

inTransaction()

检测是否在一个事务内

注意:当需要使用事务的时候,数据库表引擎不能是 MyISAM ,必须要是 InnoDB。

try {

$host = 'mysql:host=localhost;dbname=test';

$pdo = new PDO($host, 'root', 'aaaaaa', [PDO::ATTR_AUTOCOMMIT => 0]);

// 建表 SQL

$sql = <<

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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值