pdo实现事务机制:
事务机制:
1.事件中所有任务都成功
1)开启事件
2)一件事件由多个任务组成,如果所有任务都成功则该事件完成,接着提交该事件
3)结束事件;
2.事件中有一个任务失败
1)开启事件
2)一件事件由多个任务组成,其中有一个任务失败则该事件完成,接着回滚该事件
3)结束事件;
事件机制:
1.myisam不支持
2.innodb支持
异常处理:
try{
//异常捕捉
}catch(PDOException KaTeX parse error: Expected '}', got 'EOF' at end of input: e){ //e为异常对象
}
异常对象:
1.
e
−
>
g
e
t
M
e
s
s
a
g
e
(
)
;
2.
e->getMessage(); 2.
e−>getMessage();2.e->getCode();
3.$e->getLine();
pdo事件机制:
1.$pdo->beginTransaction();
2.$pdo->commit();
3.$pdo->rollBack();
PDOException异常处理类:
• getMessage()
• getCode()
• getLine()
PDO事件机制+异常处理
<?php
$servername = "localhost";
$username = "root";
$password = "133";
$dbname='myweb';
$pdo= new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->exec('set names utf8');
// 开启事务机制
$pdo->beginTransaction();
try{
// 第一步:user1->500->user2;
// user1:200
$sql="update stu set money=(money-500) where id=1";
$pdo->exec($sql);
// user2:600
$sql2="update stu set moneyy=(money+500) where id=2";
$pdo->exec($sql2);
// 第二步:user2->500->user3;
// user2:100
$sql3="update stu set money=(money-500) where id=2";
$pdo->exec($sql3);
// user3:502
$sql4="update stu set money=(money+500) where id=3";
$pdo->exec($sql4);
// 没有异常,则提交事件
echo '<p>转账成功</p>';
$pdo->commit();
}catch(PDOException $e){
$errorInfo=$e->getMessage();
$errorCode=$e->getCode();
$errorLine=$e->getLine();
echo '<p>转账失败</p>';
echo "<p>{$errorInfo}</p>";
echo "<p>{$errorCode}</p>";
echo "<p>{$errorLine}</p>";
// 回滚事件
$pdo->rollBack();
}
?>
**
<?php
$servername = "localhost";
$username = "root";
$password = "133";
$dbname='myweb';
$pdo= new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->exec('set names utf8');
// 开启事务机制
$pdo->beginTransaction();
try{
// 第一步:user1->500->user2;
// user1:200
$sql="update stu set money=(money-500) where id=1";
$pdo->exec($sql);
// user2:600
$sql2="update stu set money=(money+500) where id=2";
$pdo->exec($sql2);
// 第二步:user2->500->user3;
// user2:100
$sql3="update stu set money=(money-500) where id=2";
$pdo->exec($sql3);
// user3:502
$sql4="update stu set money=(money+500) where id=3";
$pdo->exec($sql4);
// 没有异常,则提交事件
echo '<p>转账成功</p>';
$pdo->commit();
}catch(PDOException $e){
$errorInfo=$e->getMessage();
$errorCode=$e->getCode();
$errorLine=$e->getLine();
echo '<p>转账失败</p>';
echo "<p>{$errorInfo}</p>";
echo "<p>{$errorCode}</p>";
echo "<p>{$errorLine}</p>";
// 回滚事件
$pdo->rollBack();
}
?>