uniqid('', TRUE),
Вы можете использовать uniqid с энтропией, чтобы сделать ее более чувствительной во времени, чтобы еще больше сократить вероятность дублирования, но помните одну вещь:
Эта функция не гарантирует уникальности возвращаемого значения. поскольку
большинство систем настраивают системные часы по NTP или тому подобное, системное время
постоянно меняется. Следовательно, возможно, что эта функция
не вернуть уникальный идентификатор для процесса / потока. Используйте more_entropy для
увеличить вероятность уникальности.
То, что вы можете сделать, это поставить случайный префикс, например:
uniqid(mt_rand(), TRUE);
Это исключит любую возможность создания дубликата.
Вы собираетесь использовать случайный префикс + энтропийную чувствительность. Сгенерированное значение будет уникальным, даже если ваш скрипт выполняется так быстро, что временная метка оказывается одинаковой даже в миллисекундах.
Проблема с вашим кодом в том, что вы используете функцию uniqid()
один раз, присваивая ее переменной, и оттуда вы получите дубликаты, конечно, потому что вы используете эту переменную:
Попробуйте этот код:
$sql = "UPDATE posts SET unique_id = uuid()";
$stmt = $pdo->prepare($sql);
$stmt->execute();