2012-03-24 4 views
0

내가 이해하지 못하는 이상한 문제가 있습니다. 나는 return $asset_ID의 주석을 해제하면 트랜잭션은 롤백 및 커밋하지 않습니다,PDO LastInsertID를 반환 할 때 트랜잭션 롤백

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

:

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를 반환하도록되어 다음과 같은 기능을 가지고있다. 주석 달린 채로두면 변수가 전달되지 않습니다. beginTransactioncommit 행을 주석 처리하면 반환 $asset_ID의 주석 처리를 제거 할 수 있으며 모든 것이 작동합니다.

거래로 남겨두고 싶습니다. $asset_ID을 반환하고 싶습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

return 때 함수 실행이 중지되므로 커밋 후 return $asset_ID; 줄을 이동해야합니다. 커밋이 호출되지 않으면 암시 적 롤백이 발생합니다.

+0

그 트릭을했습니다. 나는 커밋 전에 몇 가지 더 많은 쿼리를 던질 계획이다. 다음에 오는 쿼리에서 $ asset_ID 변수를 사용할 수 있습니까? – Progger

+0

예. 변수를 할당하면 변수를 덮어 쓰거나 설정을 해제하지 않는 한 현재 범위 내에서 사용할 수 있습니다. 모든 쿼리를 실행하고 커밋 한 후에야 값을 반환해야합니다. – nnichols