我正在使用PHP和MySQL开发一个简单的发票系统 我最初的想法是使用ID(自动递增)作为发票ID。但那不行。
当用户向我的付款服务提供商提交订单时,会创建临时发票。 如果交易失败,我需要删除临时发票。
问题是发票已经创建并给出了ID和 - 并且根据法律规定,我不允许删除任何已发给发票号的发票。所以我需要添加另一列'invoice_id'并在成功交易后添加ID。
多个用户可以同时购买。
我的问题是,如何确保检索上次创建的发票ID并将其递增?
我应该使用$_SESSION[]
存储invoice_id
吗?或者我应该从数据库中检索最新的ID?如果从DB检索,我应该锁定此事务的表吗?
非常感谢任何指导。
答案 0 :(得分:5)
为尚未处理的发票创建临时表。 处理完发票后,转到永久表并使用mysql中的AUTO_INCREMENT选项分配发票ID
这将允许两个表,一个用于未处理,另一个用于处理。您还可以放置一个id字段来跟踪temp的运动 - >烫发
答案 1 :(得分:2)
我不会删除它,我会取消它。通常在交易失败后,交易商会提醒客户付款,这在发票不再存在时是不可能的。
答案 2 :(得分:0)
一种方法是将发票保留在会话中,直到付款获得批准为止。如果付款未获批准,则发票将在用户会话中消失。
另一种方法是为待处理发票创建保留表。付款获批后,只需将数据移至发票表中即可。
最后一种方法是,继续在发票表中创建发票,但如果付款失败则软删除它。只需设置一个标志,删除= 1并在所有过程中添加“where deleted = 0”。
答案 3 :(得分:0)
我会生成纯粹随机的发票号码。最简单的策略:
md5(uniqid())
但仍然 - 在数据库中存储未完成的发票听起来更加清醒。
此外,随机因素将使发票编号更难猜测。