.... aspe che ho scritto quella cosa di getto cosi' come mi veniva in mente.


Ripensandoci si potrebbe fare meglio cosi' :

Codice PHP:

$error 
false;
$run =true;
$code "";

$upperLimit 100;
$cnt=0;

while( 
$run && $cnt<$upperLimit ) {
    
    
$code rPass(6);
    
$q "select count(*) from users where sms = '".$code."'  ";

    if( 
$ris = @mysql_query($q)) {
        
        
$data mysql_fetch_array($ris);
        
$found $data[0]; // questo e' un'intero che mi dice se ho trovato occorrenze del codice
         
        
if( $found==) {
            
$run false;
            
$error false;
        }
        
    } else  {
        
$error true;
        
$run =false;
    }   
    
$cnt ++; 
}


if( 
$cnt>=$upperLimit )
   echo 
"Limite di tentativi raggiunto. Impossibile generare codice";
else if( !
$error )
   echo 
"codice trovato : $code";
else
   echo 
"Errore riscontrato"
Visto cosi' dovrebbe andare, alla fine $code viene aggiornata dalla funziona rPass(6) ...(sempre se tale funzione e' scritta correttamente). Poi tale codice viene controllato e se nn ci sono errori di query allora controlla il numero di occorrenze trovate nella base di dati.
Quindi se tale valore e' = 0 si ferma ed esce lasciando nella var $code il codice trovato.
Altrimenti per errori o raggiungimento del limite massimo di tentativi si ferma e cio' viene controllato sotto.
Infatti le ultime istruzioni servono a controllare cos'e' successo nel while.

Cosi' a vista dovrebbe andare nel caso lo controllo un attimo meglio appena ho tempo e ti do una sol magari anche migliore.

P.S. per "k.b"
A mio avviso scaricare tutti i codici e' molto peggio che nn laciare un paio di query in piu'.
Se hai 1000000 utenti scaricheresti tutti i codici e poi dovresti effettuare una ricerca su tale array per vedere se il codice esiste.
Cio' e' piu' pesante che nn laciare un paio di query.
Se la funzione di generazione di codice eì pensata per minimizzare le collisioni al massimo se prorpio ti va male mediamente genererai 5-6 query.

Nel caso medio la query e' una e quindi a mio avviso e' meglio avere mediamente 1 query e se mi va male 5-6 piuttoscto che ogni volta scaricare dal db tutti i dati controllarli ( con funzioni di complessita' lineare, logaritmica o quadratica in base al tipo di ricerca che vai a fare ).