php - 生成相同订单号的问题
问题描述
我的应用程序是用 symfony 编写的,它有一个在线结帐系统。一般当两个或多个用户同时结账时,会生成相同的订单号。因此,它会在数据库中产生冗余,这可能会导致不一致。
我们正在为订单号生成九位数的 uniqid,同时我们正在对照数据库检查新生成的#id 以避免重复。
$slug = substr(hexdec(uniqid('', false)),0,9);
while($this->_doctrine->getManager()->getRepository('ZACartBundle:Cart')->findOneBySlug($slug) != null){
$slug = substr(hexdec(uniqid('', false)),0,9);
}
return $slug;
基本上,我们需要在并发用户进行结帐过程时为订单号提供唯一的 slug。
解决方案
您的脚本从时间戳生成唯一的 slug,但是数字太大(16 位)并且您只取前 10 位数字,这就是为什么当多个用户在短时间内访问购物车时具有相同的 id 时 slug 是相同的的时间。
您可以考虑获取最后 10 位数字来解决此问题:
$slug = substr(hexdec(uniqid('', false)), -10);