Php 当我调用beginTransaction()时,所有执行都必须在同一范围内进行吗?

Php 当我调用beginTransaction()时,所有执行都必须在同一范围内进行吗?,php,Php,例如: // assume PDO instance here: $dbh function beginTransaction() { global $dbh; $dbh->beginTransaction(); } beginTransaction(); // no typo! called the function above! $dbh->exec($sql1); // assume $sql1 is there $dbh->exec($sql2); /

例如:

// assume PDO instance here: $dbh

function beginTransaction() {
   global $dbh;
   $dbh->beginTransaction();
}

beginTransaction(); // no typo! called the function above!

$dbh->exec($sql1); // assume $sql1 is there
$dbh->exec($sql2); // assume $sql2 is there

$dbh->commit();

我想问的是:事务必须在一个作用域内启动和提交,还是可以跨越一系列函数和方法调用?对我来说,被调用的对象不关心调用方是合乎逻辑的。但在Objective-C/Cocoa中,UIView动画块是范围感知的!所以我像飞机上的鸟一样困惑。

一个事务可以跨越多个函数和方法调用:事务发生在数据库端,而不是PHP端

PHP中的
beginTransaction
仅向数据库发送“
BEGIN TRAN
”(或等效文件);然后,数据库服务器负责事务——PHP只发送SQL命令


作为旁注:您在示例中使用此函数:

function beginTransaction() {
   $dbh->beginTransaction();
}

只需注意(不确定是因为您编写了一个快速示例,还是因为它是一个真正的错误,
$dbh
将不存在于该函数中,除非您将其声明为,或将其作为参数传递——请参见手册中的内容。

事务绑定到$dbh对象,我假定它是一个PDO句柄。它独立于您当前的范围


如果在调用$dbh->beginTransaction()后执行$dbh处理的所有数据库查询,则它们将成为该事务的一部分。

感谢您的旁注。我很快就把这个例子编入了编辑器:)@openfrog:You's welcome:-)我不确定,所以我更喜欢放一个便条,以防万一:-)我不明白为什么它应该在意,只要你把指针放在周围,谁在使用它就不重要了,即使是一个不同的包含脚本。如果脚本停止执行,然后再次启动,或者如果您让它长时间处于睡眠状态,则会丢失它。只需将sql_query()保存到某个私有成员以供以后使用,它应该不会有问题。顺便说一句,这个函数调用看起来不错。