2013-10-07 15 views
2

我需要生成一个随机的字母数字字符串,该字符串对于phpmyadmin中的某个表中的特定列中的所有值是唯一的。另外,我需要它是20个字符长。有很多这样的问题已经发布,但我没有看到任何需要phpmyadmin中的列所独有的字符串。PHP:生成对phpmyadmin表中的值唯一的随机字母数字字符串

那么我会如何做到这一点在PHP?

+3

生成使用任何在相关问题的方法,检查它是否是已经在列使用一个随机字符串。重复,直到你得到一个没有被使用的。 – Barmar

+0

AFAIK,Phpmyadmin不是数据库引擎。如果你想产生一定字符长度的随机字符串,这里有很多关于这个在线信息。您将不得不每次检查该值是否在列中唯一。 – Mark

回答

5

事情是这样的:

function isToken($token) 
{ 
    if (isset($token) && $token) { 

     //verification values in BD 
     $query = "SELECT id FROM table WHERE token='$token'"; 
     $sql = mysql_query($query); 
     if (mysql_num_rows($sql) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 

function generateUniqueToken($number) 
{ 
    $arr = array('a', 'b', 'c', 'd', 'e', 'f', 
       'g', 'h', 'i', 'j', 'k', 'l', 
       'm', 'n', 'o', 'p', 'r', 's', 
       't', 'u', 'v', 'x', 'y', 'z', 
       'A', 'B', 'C', 'D', 'E', 'F', 
       'G', 'H', 'I', 'J', 'K', 'L', 
       'M', 'N', 'O', 'P', 'R', 'S', 
       'T', 'U', 'V', 'X', 'Y', 'Z', 
       '1', '2', '3', '4', '5', '6', 
       '7', '8', '9', '0'); 
    $token = ""; 
    for ($i = 0; $i < $number; $i++) { 
     $index = rand(0, count($arr) - 1); 
     $token .= $arr[$index]; 
    } 

    if (isToken($token)) { 
     return generateUniqueToken($number); 
    } else { 
     return $token; 
    } 
} 


$uniqueToken = generateUniqueToken(20); 
+1

返回false; // < - 忘记了分号 – Dewayne

1

有没有办法自动获得一个MySQL表独有的随机。您必须在PHP中创建一个唯一的随机文本,并在MySQL表中找到它,如果存在,则再次生成它。

protected function generateToken($length=6){ 
    return substr(str_shuffle('abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ1234567890'),rand(0,60-$length),$length); 
} 
1

我想我能让它超级简单:

echo md5(time());