Gerar um ID Exclusivo utilizando PHP e MYSQL
Pergunta
Oi eu sou a criação de um sistema de processos e IDENTIFICAÇÃO e um UIDO, O UID, estamos gerando aleatoriamente, mas eu sou um pouco preso, eu preciso sempre gerar um UID que atualmente não existe no banco de como o campo é um campo exclusivo usado no front-end, de modo a não expor o real ID.
Então, para recapitular, eu estou tentando gerar um id exclusivo que não existem atualmente no DB a parte que eu não tenho o trabalho é a verificação cruzada em db por isso, às vezes, vai dar um número que já existe no banco, mesmo que ele não deve obrigado antecipadamente.
Este é o meu código até agora:
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;
}
}
}
Solução 6
Eu descobri que o problema já foi, Como mencionei a todos a geração de código não era o problema!O problema foi que a cruz de seleção não estava a funcionar correctamente.Então tudo que eu fiz foi removido esse loop
while($i < $characters)
{
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
Como isso fazia com que o meu ID exclusivo para acabar errado.
Outras dicas
Para gerar unic UID você pode usar o tempo, eu acho que foi uma muito pequena chanse de que os registros serão adicionados no mesmo segundo, com dois dados aleatórios.
escrever uma função que retorne a você como que
function generate_uid(){
return md5(mktime()."-".rand()."-".rand());
}
No PHP existe uma função chamada uniqid()
Eu poderia falar sobre a geração de ids, como os outros fizeram, mas esta não é a sua pergunta.Sua consulta, parece-me bem.Se ela retorna 0 linhas, mas você parece achar o código no banco de dados, então o mais provável é que ele só tem a mesma aparência, mas na verdade não é.Poderia ser preenchido por espaços em branco.
Uma maneira de resolver isso é selecionando a última linha do seu banco de dados de usuário e ter o seu script para verificar o campo de identificação (você pode conseguir isso através da realização de uma escolha ordenar por ID descendente modo), em seguida, você pode usar essa informação para randomize números maior que o ID.
EDITAR
$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);
}