Создание уникальной случайной 5-символьной слизни - PullRequest
2 голосов
/ 18 августа 2011

Привет У меня есть функция, которая будет генерировать случайную строку, которая отлично работает.Я хотел бы сохранить эту строку как первичный ключ в моей базе данных.Проблема в том, что мне сначала нужно убедиться, что строка уникальна перед ее сохранением.Вот что у меня так далеко.Я уверен, что мне нужен цикл до результата = <0, но я не уверен, что делать, если любая помощь будет очень ценнойЯ также открыт для лучшего решения, так как думаю, что это может быть медленным решением.</p>

//generate random slug
function genRandomString($length=10,$characters = '0123456789abcdefghijklmnopqrstuvwxyz',$string = '') {
    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }

    return $string; } 

 //store slug into variable
 $slug = genRandomString('5');      

 //select the slug that is equal to our slug
 $qry = "SELECT `slug` FROM `drink_data` WHERE `slug` = '$slug'";       
 $result = mysql_query($qry);
    //if reslut make a new slug (this dosen't recheck the new slug which is a problem)
        if($result >= 0){
             $slug = genRandomString('5');

        }

1 Ответ

2 голосов
/ 18 августа 2011

Сначала вместо $result >= 0 используйте mysql_num_rows($result) >= 0).Затем вы, вероятно, захотите обернуть всю эту вещь через некоторое время:

do{
  $slug = genRandomString(5);      
  //select the slug that is equal to our slug
  $qry = "SELECT `slug` FROM `drink_data` WHERE `slug` = '$slug'";       
  $result = mysql_query($qry);
}while(mysql_num_rows($result) > 0);

Это будет генерировать новые слагы (и проверять их уникальность), пока не найдет что-то.Возможно, вы захотите добавить код к залогу при насыщении (5 чисел не так уж много, вы будете заполняться быстро, и этот цикл будет работать экспоненциально медленнее).

...