Buttandolo giù così volocemente e senza pensarci un attimo mi verrebbe da consigliarti questo:
Codice PHP:
$n= 7 ;
do{
$date = date("Y-m-d H:i:s");
$link_code = substr(md5($data),0,$n);
$code = substr($better_token, 7);
// qui la query di ricerca
$founded = // qui la query per il controllo del numero delle righe individuate query_num_rows
if($founded < 1){
// qui la query per inserire la stringa nel database
return
}
}while($founded > 0);
vi è però un problema di fondo:
il webserver esegue diversi cicli in un secondo.
Con il codice per generare la stringa casuale in un secondo avresti sempre la stessa stringa casuale generata.
Pensa a questo:
il tuo ciclo do while in un secondo esegue, ad esempio, 50 cicli.
La data generata per questi 50 cicli sarà sempre 2010-09-12 12:50:10 per la stessa data e l'md5 e la troncatura sarà, di conseguenza, sempre la stessa per tutti i cicli eseguiti nella stessa data.
Ciò significa che devi cambiare il modo di generare la stringa (sicuramente non utilizzando la funzione date()). Questo perchè? Se per disgrazia quella stringa è già presente nel database il ciclo do-while eseguirà tanti controlli sul dabatase ma quelli effettivamente utili saranno quelli associati alla stringa generata ogni nuovo secondo. Il tuo ciclo sicuramente rallenta il tutto di un secondo (che non è poco).