首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么以下PDO事务会提交?

在回答这个问题之前,我想先澄清一下,PDO(PHP Data Objects)是一个PHP扩展,用于访问数据库。PDO事务是指在执行一系列数据库操作时,如果其中任何一个操作失败,那么所有操作都将回滚,从而保持数据的一致性。

现在回答您的问题,为什么以下PDO事务会提交呢?

代码语言:php
复制
try {
    $pdo->beginTransaction();
    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
    $stmt->execute(['John Doe', 'john.doe@example.com']);
    $stmt->execute(['Jane Doe', 'jane.doe@example.com']);
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollback();
    echo "Error: " . $e->getMessage();
}

在这个例子中,PDO事务会提交,因为没有发生任何错误。当执行$pdo->commit()时,事务中的所有操作都已成功完成,因此事务会被提交到数据库。如果在执行$stmt->execute()时发生了错误,那么事务将会回滚,从而保持数据的一致性。

总之,如果在使用PDO事务时没有发生任何错误,那么事务将会自动提交。如果需要回滚事务,可以在catch块中执行$pdo->rollback()

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP的PDO事务与自动提交

PHP PDO 事务与自动提交 现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的。...事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易。 事务通常是通过把一批更改”积蓄”起来然后使之同时生效而实现的;这样做的好处是可以大大地提供这些更改的效率。...换句话说,事务可以使脚本更快,而且可能更健壮(不过需要正确地使用事务才能获得这样的好处)。 不幸的是,并非每种数据库都支持事务,因此当第一次打开连接时,PDO 需要在所谓的”自动提交”模式下运行。...自动提交模式意味着,如果数据库支持,运行的每个查询都有它自己的隐式事务,如果数据库不支持事务,则没有。 如果需要一个事务,则必须用PDO::beginTransaction() 方法来启动。...这种安全措施有助于在脚本意外终止时避免出现不一致的情况——如果没有显式地提交事务,那么假设是某个地方出错了,所以执行回滚来保证数据安全。

1.2K31

Spring事务为什么失效?

例如业务代码正常执行,提交事务,否则回滚事务。...(和传播属性相关,我们后面会提到) 执行业务逻辑 如果发生异常则会滚事务 如果正常执行则提交事务 「所以当发生异常需要滚的时候,我们一定不要自己把异常try catch掉,不然事务正常提交」 TransactionAspectSupport...只有通过外部事务提交,才能引起内部事务提交,嵌套的子事务不能单独提交 事务失效的场景有哪些?...因为声明式事物是通过目标方法是否抛出异常来决定是提交事物还是滚事物的 自调用 当自调用时,方法执行不会经过代理对象,所以导致事务失效 // 事务失效 @Service public class UserServiceV2Impl...#matches matches方法返回false,为什么返回false呢?

46341

面试突击85:为什么事务@Transactional失效?

导致 @Transactional 失效的常见场景有以下 5 个: 非 public 修饰的方法; timeout 超时时间设置过小; 代码中使用 try/catch 处理异常; 调用类内部的 @Transactional...@Transactional 执行流程是: @Transactional 会在方法执行前,自动开启事务;在方法成功执行完,自动提交事务;如果方法在执行期间,出现了异常,那么它会自动回滚事务。...throw ex; } finally { cleanupTransactionInfo(txInfo); } // 自动提交事务...,而当开发者自行添加了 try/catch 之后,@Transactional 就感知不到异常了,从而就不会触发事务的自动回滚了,这就是为什么当 @Transactional 遇到 try/catch...,也是因为没有成功调用代理对象,是通过 this 来调用方法的,所以事务也失效了;@Transactional 在遇到开发者自定义的 try/catch 也失效,这是因为 @Transactional

31410

Postgresql源码(27)为什么事务提交会通过delayChkpt阻塞checkpoint

Postgresql事务事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,下面分析为什么需要这样做? 不这样做会有什么问题。...1 提交堆栈 看一下事务提交堆栈 #1 0x0000000000539175 in CommitTransaction () at xact.c:2079 #2 0x0000000000539e04...XLOG_CHECKPOINT_SHUTDOWN : XLOG_CHECKPOINT_ONLINE); XLogFlush(recptr); 3 为什么checkpoint需要等事务提交...在commit提交前,那么如果crash发生了,redo过程覆盖这条xlog,不会有问题 情况二:如果没有delayChkpt,redo point可能发生在上图中的位置(然后checkpoint...情况三:redo point在事务提交后,redo时xlog虽然还是做不到,但是clog一定会被刷下去,所以我们不会丢失事务提交信息。

35130

Postgresql源码(23)为什么事务提交会通过delayChkpt阻塞checkpoint

Postgresql事务事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,下面分析为什么需要这样做? 不这样做会有什么问题。...1 提交堆栈 看一下事务提交堆栈 #1 0x0000000000539175 in CommitTransaction () at xact.c:2079 #2 0x0000000000539e04...XLOG_CHECKPOINT_SHUTDOWN : XLOG_CHECKPOINT_ONLINE); XLogFlush(recptr); 3 为什么checkpoint需要等事务提交...在commit提交前,那么如果crash发生了,redo过程覆盖这条xlog,不会有问题 情况二:如果没有delayChkpt,redo point可能发生在上图中的位置(然后checkpoint...情况三:redo point在事务提交后,redo时xlog虽然还是做不到,但是clog一定会被刷下去,所以我们不会丢失事务提交信息。

27550

PHP中的PDO操作学习(二)预处理语句及事务

为什么叫预处理呢?因为它可以让我们多次调用这条语句,并且可以通过占位符来替换语句中的字段条件。...号占位符在绑定的时候是以下标形式进行绑定的。 // 使用 ?...在没有事务的情况下,我们第一条数据是正常插入成功的,这并不是我们需要的结果。在这时,就需要事务能力的帮助,让我们能够让两个表要么同时成功,要么同时失败。...// 提交事务 $pdo->commit(); } catch (Exception $e) { // 回滚事务 $pdo->rollBack(); // 输出报错信息...在这里我们需要注意的是,PDO 对象最好指定错误模式为抛出异常,如果不指定错误模式的话,事务中出现的错误也不会直接报错,而是返回错误码,我们需要通过错误码来确定是否提交或回滚。

96300

PHP中的PDO操作学习(二)预处理语句及事务

为什么叫预处理呢?因为它可以让我们多次调用这条语句,并且可以通过占位符来替换语句中的字段条件。...号占位符在绑定的时候是以下标形式进行绑定的。 // 使用 ?...在没有事务的情况下,我们第一条数据是正常插入成功的,这并不是我们需要的结果。在这时,就需要事务能力的帮助,让我们能够让两个表要么同时成功,要么同时失败。...// 提交事务 $pdo->commit(); } catch (Exception $e) { // 回滚事务 $pdo->rollBack(); // 输出报错信息...在这里我们需要注意的是,PDO 对象最好指定错误模式为抛出异常,如果不指定错误模式的话,事务中出现的错误也不会直接报错,而是返回错误码,我们需要通过错误码来确定是否提交或回滚。

96710

通过 PDO 扩展与 MySQL 数据库交互(下)

为什么要费这番周折呢?直接用前面演示的 query 方法进行增删改查操作它不香吗?...3、数据库事务 最后,我们再来看看如何通过 PDO 扩展实现数据库事务提交和回滚,我们已经知道,对于单条 SQL 语句而言,事务提交和回滚是自动完成的,对于 SQL 语句序列(多条 SQL 语句),则需要显式开启事务提交事务...(); } $this->pdo->commit(); // 提交事务 return $stmt->rowCount(); // 返回受影响的行数...方法提交事务,如果 SQL 执行过程中出错,则在异常处理代码中通过 PDO 对象的 rollBack 方法回滚事务。...$post->batchInsert($items); $items = $post->selectAll(); print_r($items); 执行这段代码,打印结果中包含新插入的文章数据,则表明事务提交成功

1.5K00

PHP中使用PDO操作事务的一些小测试

当然,我们今天也不讲它们全部的区别,但有一个区别是最明显的,那就是 MyISAM 不支持事务。那么,如果我们在 PDO 操作中对 MyISAM 进行事务操作怎么样呢?...这个表中显示的就是正在执行中的事务。在 InnoDB 类型的表执行时就可以看到一条事务正在执行的记录,而 MyISAM 类型的表中则不会看到任何信息。 不提交不回滚事务会发生什么?...这样的话,可能会有长时间占据的事务存在,最终结果就是导致 MySQL 的 IPQS 奇高,而且还很难找到原因。...所以,在使用事务的时候,一定要记得 commit() 和 rollBack() 都是我们的亲兄弟,绝不能落下他们。 上一个事务没有提交没有回滚,下一个事务执行吗?...如果有两个事务依次执行,第一个事务没有提交,没有回滚,那么下一个事务还能执行吗?

54500

php pdo连接数据库操作示例

php //以下是实例化一个pdo的带码 $dsn="mysql:host=localhost;dbname=tanyong";//这就是数据源, $user="root";//这个是服务器的账号,我的电脑上是这样...事务介绍:事务介绍我就通过我自己的理解来讲解一遍吧,就是先要关闭数据库的自动提交功能(什么是自动提交功能?...,就进行事务回滚,即使回归初始状态(也就是前面在事务处理代码中的插入或改变或删除或查询的语句全部作废),还有一个优点是不会因为进入其他网页,或执行其他sql语句而影响到事务处理的进程 //以下事务回滚的代码简介...("insert into tongxue values('130042100','猪八戒','男')"); if($a==true && $b==true){ $pdo- commit();//提交事务...} else{ $pdo- rollback();//事务回滚 } ?

1.8K31

PHP中使用PDO操作事务的一些小测试

今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容。 在 MyISAM 上使用事务怎么样?...当然,我们今天也不讲它们全部的区别,但有一个区别是最明显的,那就是 MyISAM 不支持事务。那么,如果我们在 PDO 操作中对 MyISAM 进行事务操作怎么样呢?...这样的话,可能会有长时间占据的事务存在,最终结果就是导致 MySQL 的 IPQS 奇高,而且还很难找到原因。...所以,在使用事务的时候,一定要记得 commit() 和 rollBack() 都是我们的亲兄弟,绝不能落下他们。 上一个事务没有提交没有回滚,下一个事务执行吗?...如果有两个事务依次执行,第一个事务没有提交,没有回滚,那么下一个事务还能执行吗?

31610

数据库(PDO 对象常用方法)

PDO->quote() — 为某个SQL中的字符串添加引号 PDO->setAttribute() — 为一个“数据库连接对象”设定属性 PDO中的数据库连接 许多Web应用因为使用了向数据库的持久连接而得到优化...,ACID)通俗一点讲,一个事务中所有的工作在提交时,即使它是分阶段执行的,也要保证安全地应用于数据库,不被其他的连接干扰。...换句话说,事务可以使你的脚本更快速同时可能更健壮(要实现这个优点你仍然需要正确的使用它们)。 不幸运的是,并不是每个数据库都支持事务,因此PDO需要在建立连接时运行在被认为是“自动提交”的模式下。...自动提交模式意味着你执行的每个查询都有它自己隐含的事务处理,无论数据库支持事务还是因数据库不支持而不存在事务。...这是对于脚本意外终止的情况来说是一个安全的方案——如果你没有明确地提交事务,它将会假设发生了一些错误,为了你数据的安全,所以就执行回滚了。

61040

PDO::rollBack讲解

PDO::rollBack PDO::rollBack — 回滚一个事务(PHP 5 = 5.1.0, PECL pdo = 0.1.0) 说明 语法 bool PDO::rollBack ( void...) 回滚由PDO::beginTransaction()发起的当前事务。...如果没有事务激活,将抛出一个 PDOException 异常。 如果数据库被设置成自动提交模式,此函数(方法)在回滚事务之后将恢复自动提交模式。...包括 MySQL 在内的一些数据库,当在一个事务内有类似删除或创建数据表等DLL语句时,自动导致一个隐式地提交。隐式地提交将无法回滚此事务范围内的任何更改。...实例 回滚一个事务 下面例子在回滚更改之前开始一个事务并发出两条修改数据库的语句。但在 MySQL 中,DROP TABLE 语句自动提交事务,因此在此事务内的任何更改都不会被回滚。 <?

61121

从Laravel,Yii,Thinkphp中学习php 操作数据库的事务嵌套

notorm本身不支持事务嵌套,但是在开发过程中,多个操作进行拆分,根据不同业务不同进行调用,必然设计到多个事务嵌套在一起的问题。...因此底层还是需要支持事务嵌套。 嵌套事务的核心思想就是添加一个计数器,第一次开启事务,最后一次提交或回滚执行数据库操作,其他情况只是更新计数器数值。...三个框架都是通过计数器以及数据库本身的"部分事务"支持嵌套事务的操作。MYSQL 中通过 savepoint 的方式来实现只提交事务的一部分。...操作流程大体分一下三步 1) 开启事务,检查计数器是否是第一次开启,如果是则执行pdo开启事务,不是则修改计数器的值,同时根据是否支持部分事务,执行pdo savepoint操作。...2) 事务提交,检查计数器是否是最外层事务,是则执行pdo事务提交操作,否则计数器减1 3) 事务回滚,检查计算器是否是最外层操作,是则执行pdo事务回滚,否则计数器减1,同时根据是否支持部分事务,执行

1.3K40

Mybatis中的事务原理和自动提交设置 事务的四大特性 隔离性产生的3个问题及解决办法

Mybatis中的事务原理和自动提交设置 Mybatis中的事务 什么是事务 事务是指的是一个业务上的最小不可再分单元,通常一个事务对应了一个完整的业务,而一个完整的业务需要批量的DML语句共同联合完成...d:持久性:事务结束,数据就持久化到数据库。 不考虑隔离性产生的3个问题 脏读:一个事务读到另一个事务提交的数据。...不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致 幻读:在一个事务里面的操作中发现了未被操作的数据 解决办法:四种隔离级别 事务隔离级别: 读未提交事务提交的数据可以读。...什么问题都解决不了 读已提交:读取已经提交了的数据,可以防脏读,不能防不可重复读和幻读。 可重复读:读一个数据时,上锁。...事务提交 Mybatis中的事务是通过sqlsession对象的commit方法和rollback方法实现事务提交和回滚 走来走去提交和回滚都少不了connection,也就是原来jdbc的操作

2.5K30

PHP中关于PDO数据访问抽象层的功能操作实例

PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?...);//fetchAll为全选 //事务类型:即要不全部都通过,要不全部失败,可以参考淘宝购物,必须同时满足扣款,减去库存和添加订单三项条件,缺一不可 //beginTransation 启动事务 //...commit 提交事务 //rollback 回滚:返回到启动事务之前 //1.造PDO对象 $dsn ="mysql:dbname=mydb;host=localhost"; $pdo =new PDO...); try //尝试运行,包含从开启事务提交事务 { //开启事务 $pdo->beginTransaction(); $sql1 = "insert into info values('004',...->exec($sql1); $pdo->exec($sql2); $pdo->exec($sql3); //提交事务 $pdo->commit(); } catch(Exception

55110
领券