暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PDO错误模式及事务处理

原创 flyinsky323 2023-07-06
144

三种模式
PDO::ERRMODE_SLIENT:默认模式,静默模式 0
有错误时不会提示
<?php
try {
$dsn="mysql:host=localhost;dbname=testdb";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$sql = "select * from noneTab";
$pdo->query($sql);
echo $pdo->errorCode();//查询一个不存在的表,如果没有这一行代码就是一片空白
print_r($pdo->errorInfo());//显示更详细的错误信息
} catch (PDOException $e) {
echo $e->getMessage();
}
?>

PDO::ERRMODE_WARNING:警告模式 1
<?php
try {
$dsn="mysql:host=localhost;dbname=testdb";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); //PDO::ERRMODE_WARNING写作 1 也行
$sql = "select * from noneTab";
$pdo->query($sql);
echo $pdo->errorCode();
echo "<br />";
print_r($pdo->errorInfo());
} catch (PDOException $e) {
echo $e->getMessage();
}
?>

PDO::ERRMODE_EXCEPTION:异常模式 2
<?php
try {
$dsn="mysql:host=localhost;dbname=testdb";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //PDO::ERRMODE_EXCEPTION写作 2 也行
$sql = "select * from noneTab";
$pdo->query($sql);
echo $pdo->errorCode();
echo "<br />";
print_r($pdo->errorInfo());
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
有错误时,错误之后的代码不再执行,直接执行getMessage()
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'testdb.nonetab' doesn't exist


beginTransaction() 启动一个事务
commit() 提交一个事务
rollBack() 回滚一个事务
inTransaction() 检测是否在一个事务内

try{
$dsn = "mysql:host=localhost;dbname=testdb";
$username = "root";
$password = "root";
$options = array(PDO::ATTR_AUTOCOMMIT,0);
$pdo = new PDO($dsn,$username,$password,$options);
//开启事务
$pdo->beginTransaction();
$sql = 'update userAccount set money=money-2000 where username="imooc"';
$res1 = $pdo->exec($sql);
if($res1==0){
throw new PDOException('imooc转账失败');
}
$res2 = $pdo->exec('update userAccount set money=money+2000 where username="king"');
if($res2==0){
throw new PDOException('king接收失败');
}
$pdo->commit();
}catch(PDOException $e){
$pdo->rollBack();
echo $e->getMessage();
}

最后修改时间:2023-07-06 15:56:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论