PDO 事务函数与 MySQL 事务语句?

     2023-02-24     205

关键词:

【中文标题】PDO 事务函数与 MySQL 事务语句?【英文标题】:PDO transaction functions vs MySQL transaction statements? 【发布时间】:2015-02-12 01:37:07 【问题描述】:

PDO 提供启动、提交和回滚事务的功能:

$dbh->beginTransaction();
$sth = $dbh->prepare('
    ...
');
$sth->execute(); // in real code some values will be bound
$dbh->commit();

是否有任何理由使用 PDO 函数而不是简单地使用 MySQL 中的事务语句?即:

$sth = $dbh->prepare('
    START TRANSACTION;
    ...
    COMMIT;
');
$sth->execute(); // in real code some values will be bound

更新: 只是给其他正在研究此问题的人的注释,经过一些测试后,我实际上发现了上面的第二种情况(在 prepare() 中使用 START TRANSACTIONCOMMIT)将导致抛出异常。因此,为了使用带有预准备语句的事务,您必须使用第一种情况中显示的 PDO 函数。

【问题讨论】:

【参考方案1】:

从可移植性的角度来看,您最好使用 PDO 提供的界面,以防您想要使用不同的 DBMS,或者让其他团队成员使用其他 DBMS。

例如SQLite uses a slightly different syntax;如果要从 MySQL 迁移到 SQLite 数据库,则必须更改 PHP 代码中包含语句 START TRANSACTION; 的每个字符串,因为它不再是数据库的有效语法。 SQL Server 2014 是另一个不使用此语法的示例。

当然,you can also use BEGIN; in MySQL 启动事务,这在 SQLite 和 SQL Server 中可以正常工作。你可以改用它。

您通常能够找到自己喜欢的且相当便携的语法,但如果您不必考虑它,为什么还要花时间和精力去考虑它呢?充分利用 a dozen PDO drivers 的优势,让您的生活更轻松。如果您完全关心一致性,请选择 API 而不是特定于实现的 SQL 语法。

【讨论】:

【参考方案2】:

PDO 和 mysql 事务没有什么区别。除了

例如,您可以开始您的事务,让一些查询运行一些 php 代码根据您的代码执行更多查询等,您可以在该代码的末尾回滚,只需执行 $PDO->rollback(); 这比创建 2 更容易- 多 3 个查询,而不是使用 $pdo->beginTransaction();

同样使用$pdo->rollback(); 会缩短几行,在我看来,它也比创建另一个查询并执行它更清晰。

【讨论】:

那些模拟交易有时很有用,但有时您需要获取结果,例如事务中查询的最后插入 id。

事务、存储过程和 PDO

】事务、存储过程和PDO【英文标题】:Transaction,storedprocedureandPDO【发布时间】:2012-09-2613:29:42【问题描述】:PHP中的单个操作必须经过以下步骤:执行编号。来自PHPPDO的mysql语句,基于大量业务逻辑。执行存储过程。从PDO执行更... 查看详情

PDO 事务和函数调用

】PDO事务和函数调用【英文标题】:PDOTransactions&functioncalls【发布时间】:2012-05-1700:45:15【问题描述】:函数调用可以发生在PDO事务块中吗?这是简化代码(使用MySql数据库)...try$db->beginTransaction();//calltofunctionthatcreatesuser$us... 查看详情

php中的mysqli扩展学习mysqli的事务与预处理语句(代码片段)

对于MySQLi来说,事务和预处理语句当然是它之所以能够淘汰MySQL(原始)扩展的资本。我们之前也已经学习过了PDO中关于事务和预处理语句相关的内容。所以在这里,我们就不再多讲理论方面的东西了,直接上代码来看看MySQLi中... 查看详情

pdo类基本应用二(代码片段)

思考:在MySql中,有一种事务功能,能够帮助实现哪些需要多个步骤操作,然后一次性完成的,那么PDO中是如何实现的呢?引入:其实,事务操作本质上是一种SQL操作,也就是说利用前面所说的写操作(事务都是写操作),就可以... 查看详情

pdo事务控制

...‘);$pdo->exec(‘setnamesutf8‘);$pdo->beginTransaction();//开启事务$sql1="UPDATEusersSETmoney=money+100WHEREid=100";$res1=$pdo->exec($sql1);$sql2="UPDATEusersSETmoney=money+100WHEREid=2";$res2=$pdo->exec($sql2);if($res1>0&&$res2>0)$pdo->commit();//事务提交ech... 查看详情

php操作pdo预处理以及事务(代码片段)

阅读目录阐述准备连接查询插入更新删除事务阐述PDO为PHP访问各类数据库定义了一个轻量级一致性的接口,无论什么数据库,都可以通过一致的方法执行查询和获取数据,而不用考虑不同数据库之间的差异,大大简化了数据库操... 查看详情

php操作pdo预处理以及事务(代码片段)

阅读目录阐述准备连接查询插入更新删除事务阐述PDO为PHP访问各类数据库定义了一个轻量级一致性的接口,无论什么数据库,都可以通过一致的方法执行查询和获取数据,而不用考虑不同数据库之间的差异,大大简化了数据库操... 查看详情

PHP PDO MySQL 以及它如何真正处理 MySQL 事务?

】PHPPDOMySQL以及它如何真正处理MySQL事务?【英文标题】:PHPPDOMySQLandhowdoesitreallydealwithMySQLtransactions?【发布时间】:2018-05-2808:26:29【问题描述】:我正在努力克服它,但我就是无法理解在PHP中使用PDO和MySQL进行事务处理背后的逻... 查看详情

mysql学习笔记之事务

(一)什么是事务??事务其实就是一个完整的业务逻辑,不可再分,是一个最小的工作单元。准确来说,一个事务就是批量的DML语句同时成功或者同时失败。说明:只有DML语句与事务有关系,其他语句与事务无关DML语句:insert... 查看详情

pdo(数据访问抽象层)pdo事务功能和预处理功能---2017-05-05

之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的;那么如果访问其他类型的数据库呢?那么这就用到了PDO(数据访问抽象层)。一、关于PDO基本语句(以MySQL数据库为例,因为电脑没有其... 查看详情

了解 pdo mysql 事务

】了解pdomysql事务【英文标题】:Understandingpdomysqltransactions【发布时间】:2016-09-3003:21:09【问题描述】:PHPDocumentation说:如果您以前从未遇到过交易,他们提供4个主要特点:原子性、一致性、隔离性和持久性(ACID)。在外行的... 查看详情

mysql pdo 事务和会话存储

】mysqlpdo事务和会话存储【英文标题】:mysqlpdotransactionandsessionstorage【发布时间】:2012-12-0802:54:36【问题描述】:我很难确定我的网络应用程序的最佳解决方案是什么,该应用程序在每个会话中多次访问(主要是读取)相同的用... 查看详情

关于更新事务的 PHP PDO 选择的说明

】关于更新事务的PHPPDO选择的说明【英文标题】:ClarificationaboutPHPPDOSelectforUpdateTransaction【发布时间】:2013-06-2101:00:45【问题描述】:我是使用事务的新手。基本上,我可以使用STARTTRANSACTION后跟SELECT...FORUPDATE语句成功锁定MySQL控... 查看详情

事务与存储过程(代码片段)

1.事务管理**(1)概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。(2)MySQL默认就自带事务,但是MySQL自带的事务是一条语句独占一个事务(3)也可以自己控制事务:**startranscation;-... 查看详情

pdo中的事务处理

基本原理和步骤其实都是一样的(可参看上一篇“MySQL的事务处理”),PDO中的事务处理就是调用PDO对象的三个方法:开启事务:beginTransaction回滚操作:rollBack执行操作:commit事务处理最典型的就是借还钱。下面以张三向李四还1... 查看详情

pdo 驱动程序不支持 linux 上的事务

】pdo驱动程序不支持linux上的事务【英文标题】:pdodriverdoesnotsuporttransactionsonlinux【发布时间】:2012-10-0918:30:35【问题描述】:我一直在使用DBLibPDO驱动程序将我的PHPSymfony项目与MsSQL数据库连接(我只需要查询2个表,Propel设置为... 查看详情

mysql事务(代码片段)

文章目录MySQL事务一、事务的两种操作1.手动提交事务2.自动提交事务二、事务四大特性三、事务隔离级别MySQL事务一、事务的两种操作1.手动提交事务语句功能starttransaction;或者BEGIN;开启事务commit;提交事务rollback;回滚事务手动提... 查看详情

pdo事务机制

<?phpheader(‘content-type:text/html;charset=utf-8‘);$pdo=newPDO(‘mysql:host=localhost;dbname=dbname‘,‘root‘,‘123‘);$pdo->query(‘setnamesutf8‘);$res=$pdo->query(‘select*fromtable‘);//预处理数据$dat 查看详情