示例:
// 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动画块是范围感知的!所以我像飞机上的一只鸟一样困惑。
答案 0 :(得分:2)
一个事务可以跨越多个函数和方法调用:事务发生在数据库端,而不是PHP端。
PHP中的beginTransaction
仅向数据库发送“BEGIN TRAN
”(或等效的);然后,它是负责事务的数据库服务器 - PHP只发送SQL命令。
作为旁注:您在示例中使用此函数:
function beginTransaction() {
$dbh->beginTransaction();
}
请注意(不确定是不是因为你写了一个快速的例子,或者这是一个真正的错误) $dbh
在该函数中不存在,除非你将它声明为{ {3}},或将其作为参数传递 - 请参阅手册中的global
。
答案 1 :(得分:0)
我假设事务绑定到$ dbh对象,这是一个PDO句柄。它与您当前的范围无关。
如果在调用$ dbh-> beginTransaction()之后执行,则$ dbh处理的所有数据库查询都将成为该事务的一部分。