循环中没有唯一ID的可能性是什么?



我正在通过数组循环,每个记录都用 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?

uniqid()自1970年1月1日开始时,基于微秒的数量生成一个值。在单个计算机上,每个ID都是唯一的。有可能(但不太可能)两台单独的机器可能会生成相同的uniqid(),在这种情况下,可以使用前缀和熵参数来避免这种情况。

PHP中有许多UUID(或GUID)的实现,但是这些通常会产生V4 UUID,这些v4 UUID不能保证是唯一的(但是碰撞的可能性很小)

如果您需要生成更安全的东西,则可以使用openssl-random-pseudo-bytes()

最新更新