【问题标题】:Make unique invoice numbers with mysql and use使用 mysql 制作唯一的发票编号并使用
【发布时间】:2013-12-05 14:39:57
【问题描述】:

目前我的功能是创建一个随机的唯一发票编号,该编号存储在表单的隐藏字段中

function generate_invoice_number() {
    global $wpdb;
    $lastVisitor = $wpdb->get_results("SELECT visitorID FROM event_visitors_2014 ORDER BY visitorsID DESC LIMIT 1", ARRAY_A);
    $nr_last = $lastVisitor[0]['visitorID']; 
    $nr = 501 + $nr_last;
    $value = sprintf( '%04d', $nr );
    $number = 'LEDEXPO'.date('Y').'-'.uniqid().'-'.$value;      
    return $number; 
} 

当多人同时使用表单时,我遇到了一个问题,比如 3 个人正在使用他们都生成相同编号的表单。 所以我添加了 uniqid(),所以 $value 可以重复但 $number 应该是唯一的?这是正确的还是有更好的方法?

如何制作测试函数来测试这个函数的唯一性?

问候

【问题讨论】:

  • 在插入记录之前是否需要唯一ID。通常最好让数据库创建唯一 ID,然后由程序重新格式化它。
  • 使用 UUID(PHP 中的 uniqid)是一个不错的方法。 UUID 被设计为具有极强的抗碰撞能力。
  • @user2310289,是的,我认为在插入之前。我需要最后 3 个数字从 500 开始。我在表单提交时发送了一封电子邮件,这就是为什么我还生成一个 .pdf 发票,其中附有电子邮件的号码。
  • @Idrumm,UUID?需要阅读这个 tx
  • @alex 你已经在使用它们了。这只是 uniqid() 给你的不同术语。编辑:我错了。请看这篇帖子stackoverflow.com/questions/3766009/…

标签: random unique invoice


【解决方案1】:

试试这个:

function generate_invoice_number()
{
global $wpdb;
$lastVisitor = $wpdb->get_results("SELECT visitorID FROM event_visitors_2014 ORDER BY visitorsID DESC LIMIT 1", ARRAY_A);
$nr_last = $lastVisitor[0]['visitorID'] + 1;
$number = date('Ymd') . $nr_last;
return $number; 
} 

【讨论】:

  • tx 但这不是必要的,因为 visitorID 是 mysql 端的自动增量。
  • “visitorID”列的数据类型是什么?你创建visitorID的逻辑是什么?
  • visitorID 是 INT,我正在使用它来创建“唯一”发票号码
  • 试试这个:$number = date('ymdhis').$lastVisitor[0]['visitorID']
猜你喜欢
  • 1970-01-01
  • 2014-10-25
  • 2017-09-28
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多