【问题标题】:Creating a unique random 5 character slug创建一个独特的随机 5 字符 slug
【发布时间】:2011-10-29 13:03:10
【问题描述】:

您好,我有一个函数可以生成一个可以正常工作的随机字符串。我想做的是将该字符串作为主键存储在我的数据库中。问题是我首先需要确保字符串在存储之前是唯一的。这是我到目前为止所拥有的。我确定我需要一个循环,直到 result =

//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');

        }

【问题讨论】:

  • 我对此很陌生,我查了一下 GUID 是什么,你能提供一个例子吗?
  • 附带说明,如果 db 中的该字段是主字段或唯一字段,则如果您尝试输入重复项,则 db 将出错。无论您使用哪种独特的生成器,您都可以使用它。
  • @battal,是的,这个想法是为了防止显示数据库错误:)
  • 您想以任何方式隐藏 db 错误,我的意思是下面 Stefan Mai 的回答中的用法 :)
  • 最后,我一直在寻找这个链接:kevin.vanzonneveld.net/techblog/article/…(也在 SO 问题stackoverflow.com/questions/4153628/… 中提到)

标签: php mysql unique slug


【解决方案1】:

首先,不要使用$result &gt;= 0,而是使用mysql_num_rows($result) &gt;= 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);

这将不断生成新的 slug(并检查它们的唯一性),直到找到一些东西。您可能需要添加代码以在饱和时保释(5 个数字不会那么长,您会很快填满,并且此循环的运行速度会呈指数级增长)。

【讨论】:

  • 我在尝试实施此解决方案时遇到超时错误。
  • 对不起,">= 0" 是错误的,应该是"> 0"。已修复,谢谢@BrandonRandon。
  • 谢谢,我早该想出来的:)
猜你喜欢
  • 1970-01-01
  • 2020-08-29
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多