2012-03-24 2 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, транзакция откатывается и не совершает. Если оставить комментарий, переменная не будет передана. Если я прокомментирую строки beginTransaction и commit, я могу раскомментировать возврат $asset_ID и все работает.

Я хочу, чтобы это было как транзакция, и я хочу вернуть $asset_ID. Что я делаю не так?

ответ

1

Вам необходимо переместить линию return $asset_ID; после фиксации, когда выполнение функции прекращается, когда вы return. Без вызова фиксации вы получаете неявный откат.

+0

Это сделало трюк. Я планирую бросить еще несколько запросов перед фиксацией. Смогу ли я использовать переменную $ asset_ID в следующих запросах? – Progger

+0

Да. После того, как вы назначили эту переменную, она доступна для использования в текущей области, если вы не перезапишете или не отмените ее. Вы не должны возвращать значение до тех пор, пока не выполните все ваши запросы и не совершите их. – nnichols

Смежные вопросы