我的应用程序是用symfony编写的,它具有一个在线结帐系统。通常,当两个或多个用户同时进行结帐时,它将生成相同的订单号。 结果,它在数据库中生成冗余,这可能导致不一致。
我们正在为订单号生成9位数的单数,同时我们正在针对数据库检查新生成的#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;
基本上,当并发用户执行结帐流程时,我们需要对订单号具有唯一的标记。
答案 0 :(得分:0)
您的脚本会从时间戳生成唯一的段,但是数量太大(16位),并且您只输入前10位,这就是为什么当超过1个用户使用相同的ID来访问购物车时段相同的原因在短时间内。
您可以考虑获取最后10位数字来解决此问题:
$slug = substr(hexdec(uniqid('', false)), -10);