Я хочу создать уникальное значение и сохранить его в базе данных.
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
У меня есть два варианта (PSEUDO CODE):
1)
$allValues = 'SELECT unique_number FROM table'; //EXAMPLE!
$number = generateRandomString();
while(in_array(number, $allValues)) {
$number = generateRandomString();
}
2)
function getUniqueNumber($uniqueNumber) {
return 'SELECT unique_number FROM table WHERE unique_number = ' . $uniqueNumber; //EXAMPLE!
}
$number = generateRandomString();
while(getUniqueNumber($unique)) {
$number = generateRandomString();
}
Но оба метода неэффективны, если у меня более 100 000 записей.
Лучший способ проверить, существует ли значение в базе данных и генерировать новое, если существует?
Для этого я могу использовать также Доктрину.
Если вам просто нужно уникальное значение в этой таблице, самый простой способ - вставить в эту таблицу поле автоматического инкремента, поэтому при каждой вставке база данных создаст это для вас:
ALTER TABLE 'users' ADD 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Затем вы можете получить это значение с помощью mysql_insert_id()
или PDO::lastInsertId
generateRandomString()
не будет возвращать «уникальные» идентификаторы вообще