// Created on savesnippets.com ยท https://savesnippets.com/mqUssocCNnNGFx beginTransaction(); try { $result = $fn($db); $db->commit(); return $result; } catch (Throwable $e) { if ($db->inTransaction()) $db->rollBack(); throw $e; } } $orderId = transaction($db, function (PDO $db) use ($cart) { $db->prepare('INSERT INTO orders (user_id, total) VALUES (?, ?)') ->execute([$cart->userId, $cart->total]); $orderId = (int)$db->lastInsertId(); foreach ($cart->items as $i) { $db->prepare('INSERT INTO order_items (order_id, sku, qty) VALUES (?,?,?)') ->execute([$orderId, $i->sku, $i->qty]); } return $orderId; });