返回LastInsertID时PDO事务回滚

时间:2012-03-24 00:00:05

标签: php mysql transactions pdo lastinsertid

我有一个我不明白的奇怪问题。我有以下函数应该返回$ asset_ID:

function commit_purchase($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $date, $org_to_member_ID, $asset_ID, $purchaser_cur_invest, $purchaser_cred_deb, $purchaser_balance) {
global $db;
$db->beginTransaction();
$query = "INSERT INTO assets
                       (asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date, is_approved)
                    VALUES
                       (:asset_type_ID, :org_ID, :asset_desc, :asset_cost, :asset_cost, :date, 1)";
$statement = $db->prepare($query);
$statement->bindValue(':asset_type_ID', $asset_type_ID);
$statement->bindValue(':org_ID', $org_ID);
$statement->bindValue(':asset_desc', $asset_desc);
$statement->bindValue(':asset_cost', $asset_cost);
$statement->bindValue(':date', $date);
$statement->execute();
$asset_ID = $db->lastInsertId();
//return $asset_ID;
$db->commit(); 
}

我正在调用函数:

$asset_ID = commit_purchase($asset_type_ID, $org_ID..etc, etc.);

如果我取消注释return $asset_ID,则事务回滚并且不提交。如果我留下评论,则不传递变量。如果我注释掉beginTransactioncommit行,我可以取消注释返回$asset_ID,一切正常。

我希望它作为一个交易保留,我想要返回$asset_ID。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要在提交后移动return $asset_ID;行,因为return时函数的执行会停止。如果没有调用commit,则会得到隐式回滚。