【发布时间】:2011-01-21 19:50:27
【问题描述】:
我的代码如下所示:
function foobar(array& $objects, $con = null)
{
if (is_null($con))
$con = DbSingleton::getConnectio();
$con->beginTransaction(); // <- question 1
try
{
foreach($objects as $object)
{
// allocate memory for new object
$new_obj = new MyShiningNewObject();
// do something to the new object ...
$new_obj->setParentId($object->getId());
$new_obj->save($con);
// mark for garbage collection
unset($new_obj); // <- question 2
}
$con->commit();
}
catch(Exception $e){ $con->rollBack(); }
}
我的问题是:
-
我正在开始一个事务,这很可能是一个嵌套事务。在嵌套事务的情况下,如果抛出异常并且我回滚,回滚到多远(到最外面的事务) - 常识表明应该是这种情况,但永远不知道。
我正在释放内存(好的,Zend GC 将其标记为“可释放”)。由于我在循环之后提交事务(变量在循环中被标记为可重复),这是否安全 - 我的意思是即使我已取消设置值来自的变量,数据也会安全地存储在数据库中吗?
【问题讨论】:
标签: php database transactions