Откат транзакции PDO при возврате LastInsertID - PullRequest
0 голосов
/ 24 марта 2012

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

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

1 Ответ

1 голос
/ 24 марта 2012

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

...