PDO::ERRMODE_EXCEPTION]); $db->exec("CREATE TABLE stock (id INTEGER PRIMARY KEY, available INTEGER NOT NULL CHECK(available >= 0))"); $db->exec("INSERT INTO stock VALUES (1,5)"); $reserve = $db->prepare("UPDATE stock SET available = available - :take WHERE id = :id AND available >= :needed"); foreach ([3,3] as $count) { $reserve->execute(["take"=>$count,"id"=>1,"needed"=>$count]); echo $reserve->rowCount() === 1 ? "Reserved\n" : "Insufficient stock\n"; } echo $db->query("SELECT available FROM stock WHERE id=1")->fetchColumn(), " left\n";