<?php
function transaction(PDO $db, callable $fn): mixed {
$db->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;
});
Create a free account and build your private vault. Share publicly whenever you want.