Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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_Auto Increment_Serial Number - Fatal编程技术网

Php 生成序列号或唯一订单号

Php 生成序列号或唯一订单号,php,auto-increment,serial-number,Php,Auto Increment,Serial Number,如何在php中生成唯一的序列号或订单号而不检查db?如果要保证唯一性,则必须检查某些内容。您可以使用平面文件,只存储最近使用的数字(然后可以递增),但不使用数据库是愚蠢的。您需要存储一系列与该号码相关的其他信息(联系方式、订单内容等),而数据库正是存储这些信息的理想选择。如果您使用的是MySQL数据库,您可以生成一个序列订单号,而无需使用列预先检查数据库。插入新行将导致为该列分配一个新的唯一ID,而无需在PHP中读/写该列 或者,如果您想要一个全局唯一的ID,甚至不需要数据库,那么您可以使用PH

如何在php中生成唯一的序列号或订单号而不检查db?

如果要保证唯一性,则必须检查某些内容。您可以使用平面文件,只存储最近使用的数字(然后可以递增),但不使用数据库是愚蠢的。您需要存储一系列与该号码相关的其他信息(联系方式、订单内容等),而数据库正是存储这些信息的理想选择。

如果您使用的是MySQL数据库,您可以生成一个序列订单号,而无需使用列预先检查数据库。插入新行将导致为该列分配一个新的唯一ID,而无需在PHP中读/写该列


或者,如果您想要一个全局唯一的ID,甚至不需要数据库,那么您可以使用PHP的()函数。请注意,这将返回一个字符串。如果使用多台物理计算机或在服务器之间移动,则应添加在每台计算机上都不同的前缀(第一个参数)。在同一台计算机上使用时,此函数不应两次返回相同的字符串值。

请参阅或
uuid\u create
中的或在mysql中使用自动增量列时存在一些问题(尤其是它不能扩展到等效节点)

虽然您可以在任何地方(memcache、文件、数据库)维护序列生成器,但PHP并没有实现复杂的文件锁定语义——除了影响性能之外,您还可以快速进入交易锁定状态。它不能扩展到大容量

如果您有PL/SQL可用,那么我建议在那里实现一个序列生成器,或者您可以考虑在PHP和SQLite中实现生成器。 我强烈建议您实现生成器以创建多种格式:

$use_number=+$sequence_number。str_pad($node_id,'0',$max_nodes,str_pad_LEFT)

其中,node_id是唯一引用存储当前序列号的存储基板的编号。$max_nodes略多于$node_id中的最大位数(例如,3最多允许999个节点)

或者将其视为两部分之间带有标点符号的字符串(和/或将这两部分存储在不同的数据库列中)


C.

如果我从类似此日期(YmbHis)的日期字符串生成,那么如果站点被大量使用,它是否会是唯一的^。我认为最好只检查DB(或者让它按照Thomas的建议为您生成订单号)。它对数据库的影响不大,即使是这样,您也可能不会每分钟生成超过几十个订单号。mysql\u可以在不重新查询数据库的情况下返回最后一个唯一的id吗?@Smith:(但不确定它是否重新查询。)根据描述,我怀疑mysql\u insert\u id是否会创建一个新的DB查询(例如,它的保留时间比MySQL上一次的_INSERT_ID()要短),但这是一个好问题。