1

我正在创建一个需要为每个页面加载选择唯一 ID 的页面。它基本上是一个采购订单系统,但 PO 只是 UID,因此任何用户都不能获得相同的 ID,这一点很重要。我尝试只调用最后一个 ID,然后添加 1 并提交,但如果两个或多个用户同时输入,这可能会产生冲突。为每个页面加载提取 UID 的最佳方法是什么?有什么解决办法吗?

谢谢

劳埃德

4

4 回答 4

1

您可以使用该uniqid函数获取唯一密钥。hexdec如果您需要一个整数,请运行它。

于 2012-08-22T01:49:58.873 回答
1

PHP有一个:

http://php.net/manual/en/function.uniqid.php

于 2012-08-22T01:50:39.940 回答
1

UniqId() 是一种方法,但会产生大量数据。正如 V Patel 所说,还有“自动增量”,这可能是您想要的选项。

  1. 在 MySQL 中设置一个带有字段“po_id”的表(比如“PurchaseOrders”)并将其设置为主键和自动增量。添加另一个字段“po_status”(TinyInt*1)和另一个“po_lastused”(日期*1)。状态将为 0=草稿、1=最终、2=已发货等。LastUsed 是用户最后一次访问详细信息。

  2. 当您要创建新的采购订单时, INSERT INTO PurchaseOrders(po_status, po_lastused) VALUES(0, NOW()); 注意:您没有指定实际的采购订单

  3. 您可以通过询问“最后插入 id”来获取 po_id (http://php.net/manual/en/mysqli.insert-id.php, http://php.net/manual/en/function.mysql -insert-id.php , http://www.php.net/manual/en/pdo.lastinsertid.php,取决于你的编码库)

  4. 将 po_id 存储在会话变量中,以便当用户返回时,您知道他们的 po_id(*2)

  5. 每次用户访问采购订单时,如果“上次更新”时间超过 5 分钟,则更新计时器。

  6. 定期删除所有草稿且上次更新时间早于您的会话的采购订单(例如一天之后)

这样,您将获得易于引用的漂亮采购订单编号。

*1 对于纯粹主义者,您还可以使用 Enum 作为状态,使用 int 作为日期 - 取决于您的偏好。您还可以将日期设置为自动更新。但我保持简单。)

*2 同样,对于纯粹主义者,您可以在此处实施更多安全措施,以确保“其他”用户无法访问其他人的采购订单,但这足以开始。

于 2012-08-22T06:11:21.173 回答
0

使用正在使用的数据库的自动增量功能,特别是如果你喜欢它是一个数字并且在你想要持久化它之前不需要它。

于 2012-08-22T02:02:31.507 回答