Ich habe ein seltsames Problem, das ich nicht verstehe. Ich habe die folgende Funktion, die $ ASSET_ID zurückkehren soll:PDO Transaktion Rollback bei der Rückgabe von 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();
}
ich die Funktion nenne etwa so:
$asset_ID = commit_purchase($asset_type_ID, $org_ID..etc, etc.);
Wenn ich die return $asset_ID
Kommentar-, rollt die Transaktion zurück und verpflichten sich nicht. Wenn ich es kommentiert lasse, wird die Variable nicht übergeben. Wenn ich die beginTransaction
und commit
Zeilen kommentieren, kann ich die Rückkehr $asset_ID
auskommentieren und alles funktioniert.
Ich möchte es als eine Transaktion bleiben und ich möchte die $asset_ID
zurückgeben. Was mache ich falsch?
Das hat den Trick gemacht. Ich plane, noch ein paar Fragen vor dem Commit einzureichen. Kann ich die Variable $ asset_ID in den folgenden Abfragen verwenden? – Progger
Ja. Sobald Sie die Variable zugewiesen haben, kann sie innerhalb des aktuellen Bereichs verwendet werden, sofern Sie sie nicht überschreiben oder aufheben. Sie dürfen den Wert erst zurückgeben, nachdem Sie alle Ihre Abfragen ausgeführt und sie übernommen haben. – nnichols