Создайте уникальный идентификатор, используя PHP и MySQL

StackOverflow https://stackoverflow.com//questions/9668151

  •  12-12-2019
  •  | 
  •  

Вопрос

Привет, я создаю систему, которую процессы и идентификаторы и UID, UID, мы генерируем случайным образом, но я немного застрял, мне нужно всегда генерировать UID, который в настоящее время не существует в DB, поскольку поле являетсяУникальное поле, используемое на переднем конце, чтобы не разоблачить реальный идентификатор.

Так, чтобы повторить, я пытаюсь создать уникальный идентификатор, который в настоящее время не существует в БД, часть, которую я не работал, - это перекрестная проверка в БД, поэтому иногда даст номер, который уже существует вБД, хотя это не должно заранее его спасибо.

Это мой код до сих пор:

function uniqueID($table) 
{
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$possible = '1234567890';
$code = '';
$characters = mt_rand(7,14);
$i = 0;

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
WHERE uniqueID = "'.$code.'"
LIMIT 1
');

$totalRows = $result->num_rows;

if(!$result)
{

    return $db->error;

}
else
{

    if($totalRows > 0)
    {

        return uniqueID($table);

    }
    else
    {

        return $code;

    }

}

}
.

Это было полезно?

Решение 6

Я выяснил, какая проблема была уже, как я уже упоминал всем, что поколение кода не было проблемой!Проблема заключалась в том, что перекрестная проверка не работала правильно.Так что все, что я сделал, был удален этот цикл

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}
.

Как это вызывает мой уникальный идентификатор, чтобы закончить неправильно.

Другие советы

Чтобы генерировать UNIC UID, вы можете использовать время, я думаю, что это было очень маленькое начало, что записи будут добавлены одновременно с двумя случайными данными.

Написать некоторую функцию, которая возвращает его вам, как это

function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}
.

в PHP есть функция, называемая uniqid()

http://php.net/manual/en/function.uniqid.php

Я мог бы поговорить о генерации идентификаторов, как и другие, но это не ваш вопрос. Ваш запрос кажется в порядке.Если он возвращает 0 строк, но вы, кажется, нашли код в базе данных, то скорее всего, он выглядит только тому же, но на самом деле нет.Это может быть дополнено пробелом.

Один из способов решить это, выбирая последний ряд вашей пользовательской базы данных и иметь свой скрипт для проверки поля ID (вы можете добиться этого, выполнив выбранный заказ по идентификатору в посяженном режиме), вы можете использовать эту информациюдля количества Randomize больше, чем этот идентификатор.

Редактировать

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
');

$already_in_database = array();
while ($row = mysql_fetch_array($result)){
    $already_in_database[] = $row['UID'];    
}

$new = rand(0,$some_max_value);
while(in_array($new,$already_in_database)){
    $new = rand(0,$some_max_value);
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top