Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当月的唯一文档编号_Php_Mysql_Invoice - Fatal编程技术网

Php 当月的唯一文档编号

Php 当月的唯一文档编号,php,mysql,invoice,Php,Mysql,Invoice,我需要以以下格式创建发票编号: CONSTANT_STRING/%d/mm/yyyy mm-月份(两位数) yyyy年 现在,%d是特定月份的发票编号。换句话说,这个数字每月都会重置 现在我正在数据库中检查本月最高的数字是多少。然后在其递增之后,我保存该行 我需要整数是唯一的。但是,有时它会被复制(两个用户同时保存) 有什么建议吗?在字段上放置唯一索引,并在尝试保存第二个实例时捕获数据库错误。另外,将获取值推迟到最后一个可能的时刻。一个解决方案是选择。。。对于更新,它会阻止行,直到您更新它,但

我需要以以下格式创建发票编号:

CONSTANT_STRING/%d/mm/yyyy
mm-月份(两位数) yyyy年

现在,%d是特定月份的发票编号。换句话说,这个数字每月都会重置

现在我正在数据库中检查本月最高的数字是多少。然后在其递增之后,我保存该行

我需要整数是唯一的。但是,有时它会被复制(两个用户同时保存)


有什么建议吗?

在字段上放置唯一索引,并在尝试保存第二个实例时捕获数据库错误。另外,将获取值推迟到最后一个可能的时刻。

一个解决方案是
选择。。。对于更新
,它会阻止行,直到您更新它,但可能会导致serios多任务应用程序死锁

最好的方法是获取数字并在事务中递增,然后开始工作。 这样,行不会被长时间锁定

查看
开始工作
提交

使用发票表的主键(最好是
INT
),或为每张发票分配一个唯一的编号,例如通过


注:如果您使用的是
uniqid
,则可以通过将
more\u entropy
参数设置为
true

在一次查询中设置id来增加唯一性

$query = 'INSERT INTO table (invoice_number) VALUES (CONCAT(\''.CONSTANT.'\', \'/\', (SELECT COUNT(*) + 1 AS current_id FROM table WHERE MONTH(entry_date) = \''.date('n').'\' AND YEAR(entry_date) = \''.date('Y').'\'), \'/\', \''.date('m/Y').'\'))';

那张桌子上有唯一的_标识符吗?你不能用这个吗?或者可以使用一个时间戳来确定哪个条目最先出现?表使用哪个数据库引擎?