增加发票ID的最佳方法是什么?

时间:2012-07-25 11:54:14

标签: php mysql business-logic

我正在使用PHP和MySQL开发一个简单的发票系统 我最初的想法是使用ID(自动递增)作为发票ID。但那不行。

当用户向我的付款服务提供商提交订单时,会创建临时发票。 如果交易失败,我需要删除临时发票。

问题是发票已经创建并给出了ID和 - 并且根据法律规定,我不允许删除任何已发给发票号的发票。所以我需要添加另一列'invoice_id'并在成功交易后添加ID。

多个用户可以同时购买。

我的问题是,如何确保检索上次创建的发票ID并将其递增?

我应该使用$_SESSION[]存储invoice_id吗?或者我应该从数据库中检索最新的ID?如果从DB检索,我应该锁定此事务的表吗?

非常感谢任何指导。

4 个答案:

答案 0 :(得分:5)

为尚未处理的发票创建临时表。 处理完发票后,转到永久表并使用mysql中的AUTO_INCREMENT选项分配发票ID

这将允许两个表,一个用于未处理,另一个用于处理。您还可以放置一个id字段来跟踪temp的运动 - >烫发

答案 1 :(得分:2)

我不会删除它,我会取消它。通常在交易失败后,交易商会提醒客户付款,这在发票不再存在时是不可能的。

答案 2 :(得分:0)

一种方法是将发票保留在会话中,直到付款获得批准为止。如果付款未获批准,则发票将在用户会话中消失。

另一种方法是为待处理发票创建保留表。付款获批后,只需将数据移至发票表中即可。

最后一种方法是,继续在发票表中创建发票,但如果付款失败则软删除它。只需设置一个标志,删除= 1并在所有过程中添加“where deleted = 0”。

答案 3 :(得分:0)

我会生成纯粹随机的发票号码。最简单的策略:

md5(uniqid())

但仍然 - 在数据库中存储未完成的发票听起来更加清醒。

此外,随机因素将使发票编号更难猜测。