2012-03-24 168 views
0

我有一個奇怪的問題,我不明白。我有以下的功能,應該返回$ ASSET_ID:PDO交易回滾時返回LastInsertID

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

您需要將return $asset_ID;行移至提交後,因爲當return時,函數的執行會停止。沒有提交被調用,你會得到一個隱式回滾。

+0

這樣做。我計劃在提交之前投入更多的查詢。我可以在隨後的查詢中使用$ asset_ID變量嗎? – Progger 2012-03-24 00:11:45

+0

是的。一旦分配了變量,除非您覆蓋或取消設置,否則它可在當前範圍內使用。您必須在執行完所有查詢並提交之後才能返回該值。 – nnichols 2012-03-24 00:22:00