Domanda

ciao sto creando un sistema che processa e id e un UID, il UID che stiamo generando a caso, ma sono un po 'bloccato, ho bisogno di generare sempre un UID che non esiste attualmente nel DB come il campo è aCampo unico utilizzato sulla parte anteriore in modo da non esporre il vero ID.

Pertanto ricapitore, sto cercando di generare un ID univoco che attualmente esiste nel DB la parte che non ho lavorato è la croce che controlla nel DB in modo che a volte darà un numero che esiste già nelDB Anche se non dovrebbe ringraziare in anticipo.

Questo è il mio codice finora:

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;

    }

}

}
.

È stato utile?

Soluzione 6

Ho capito qual è il problema già, come ho detto a tutti coloro che la generazione del codice non era il problema!Il problema era che il controllo croce non funzionava correttamente.Quindi tutto quello che ho fatto è stato rimosso questo loop

while($i < $characters) 
{ 

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

}
.

Poiché questo stava causando il mio ID univoco finisci in errore.

Altri suggerimenti

Per generare unic UID puoi usare il tempo, penso che sia stato un chanse molto piccolo che i record verranno aggiunti nello stesso secondo, con due dati casuali.

Scrivi una certa funzione che ti restituisce come quella

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

In PHP c'è una funzione chiamata uniqid()

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

Ho potuto parlare di generare ID, come quello fatto gli altri, ma questa non è la tua domanda. La tua query sembra bene.Se restituisce 0 righe, ma sembri trovare il codice nel database, quindi molto probabilmente sembra lo stesso, ma in realtà non lo è.Potrebbe essere imbottito da uno spazio bianco.

Un modo per risolvere questo è selezionando l'ultima riga del database utente e ha il tuo script per verificare il controllo del campo ID (è possibile ottenere questo eseguendo un ordinamento selezionato tramite ID in modalità discendente), è possibile utilizzare queste informazioniper randomizzare i numeri maggiori di quell'ID.

Modifica

$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);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top