<?php
//pdo 实现mysql 事务处理 简单示例
/*
实现向数据库中写入多条数据的事务
insert into test values ('test123', 'test123')
*/
$type = 'mysql'; //要连接的数据库类型
$host = 'localhost'; //数据库主机
$dbname = 'test'; //要选择的数据库名称
$password = '';
$username = 'root';
$dsn = "{$type}:dbname={$dbname};host={$host}";
try{
//连接数据库
$pdo = new PDO($dsn, $username, $password);
//编码
$pdo->exec("set names utf8");
//设置错误提示方式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//开启标准事务
$pdo->beginTransaction();
//构造sql语句
//$sql = "insert into test values (?,?)";
$sql = "insert into test values (:user, :password)";
//或者使用此sql语句 :user :password 与问号功能相似 绑定参数
$stmt = $pdo->prepare($sql);
//为sql语句中的变量绑定变量
$stmt->bindParam(':user', $username);
$stmt->bindParam(':password', $password);
//为sql语句中的变量 赋值
$username = 'test123';
$password = '123456';
$stmt->execute();
$rows = $stmt->rowCount();
if($rows<1){
//如果失败则抛出异常
throw new PDOexception('第一句sql语句执行失败!', '01');
}
$username = 'hello123';
$password = '123456';
$stmt->execute();
$rows = $stmt->rowCount();
if($rows<1){
//如果失败则抛出异常
throw new PDOexception('第二句sql语句执行失败!', '02');
}
$username = 'world123';
$password = '123456';
$stmt->execute();
$rows = $stmt->rowCount();
if($rows<1){
//如果失败则抛出异常
throw new PDOexception('第三句sql语句执行失败!', '02');
}
//如果没有异常被抛出则 sql语句全部执行成功 提交事务
$pdo->commit();
}catch(PDOexception $e){
//如果有异常被抛出 则事务失败 执行事务回滚
$pdo->rollback();
//输出异常信息
echo $e->getCode().'-----'.$e->getMessage();
$pdo = null;
}
?>