【发布时间】:2025-07-31 08:10:01
【问题描述】:
我的网站托管在共享主机中。这是一个 POS 应用程序(PHP、Codeigniter)。它有几个用户。每个人都在生成发票。发票编号是递增的。也就是说,当用户提交发票表单时,它会获取最后一个发票编号,然后将其加一,然后使用新发票编号创建一个新行。此过程有时(很少)在用户几乎同时提交表单时生成重复的发票编号。
一种可能的方法是使发票独一无二。但如果再次发生,用户将看到异常或格式化错误消息。
我不想向我的用户显示错误。因为当他们提交发票表格时,它包含他们写的销售信息。如果他们因为这个警告而失去它,他们会感到不安。 AJAX 将不起作用。直接提交在这里工作(用于发票提交)。
这种情况可以申请SQL锁吗?我对 SQL 锁定一无所知。
【问题讨论】:
-
请发布您的代码。
-
使用自增主键。
-
自动递增主键已经存在。我正在使用另一列(int)作为发票编号。
-
是的,codeigniter 有一个功能可以做到这一点。 codeigniter.com/userguide3/database/transactions.html
-
@sukalogika 是否可以在其他用户同时写入表格时阻止其他用户读取最新发票号?我想阻止读取(在写发票时),因为如果用户无法读取,则不会产生重复值。
标签: php mysql sql codeigniter locking