创建一个独特的随机5字符slug

时间:2011-08-18 07:17:30

标签: php mysql unique slug

您好,我有一个函数,将生成一个正常的随机字符串。我想要做的是将该字符串存储为我的数据库中的主键。问题是我首先需要确保字符串在存储之前是唯一的。这是我到目前为止所拥有的。我确定我需要一个循环,直到结果=< 0但不知道如何去做任何帮助都会很有用。我也愿意接受更好的解决方案,因为我认为这可能是一个缓慢的解决方案。

//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 个答案:

答案 0 :(得分:2)

首先,使用$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);

这将继续产生新的slu((并检查它们的唯一性),直到它找到某些东西。您可能希望在饱和时添加代码以保释(5个数字不会那么长,您将快速填满并且此循环将以指数级速度运行)。