我循环遍历一个数组,并为每个记录生成uniqid
的唯一标识符:
foreach($emailsByCampaign as $campaign => $emails) {
$campaignHex = $this->strToHex($campaign);
$values = "(";
for ($i=0; $i<sizeof($emails);$i++) {
$values .= $analyticsDbInstance->escape($emails[$i]) . ",'" . uniqid(true) . "'), (";
}
}
官方文档指出uniqid
基于微秒生成id
。循环的两个循环可能在不到两秒的时间内通过,这将导致不唯一的ID?
答案 0 :(得分:4)
uniqid()
根据自Unix时代开始 - 1970年1月1日以来的微秒数生成一个值。在一台机器上,每个ID都是唯一的。两个独立的机器可能(但不太可能)生成相同的uniqid()
,在这种情况下,可以使用前缀和熵参数来避免这种情况。
PHP中有许多UUID(或GUID)的实现,但这些实现通常会生成V4 UUID,这些UUID不能保证是唯一的(但碰撞的可能性很小)
如果您需要生成更安全的内容,可以使用openssl-random-pseudo-bytes()