2012-03-24 5 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

関連する問題