>我有这个函数来创建随机字符串:
function genID($length) {
$chars = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@!";
//only allowed chars in the blowfish salt.
$size = strlen($chars); $str = "";
for ($i = 0; $i < $length; $i++)
$str .= $chars[rand(0, $size - 1)]; // strings can be used as char arrays
// Yes, I am aware this salt isn't generated using the OS source.
// use mycrypt_create_iv or /dev/urandom/
return $str;
}
此输出如下所示:
@iBUQvldLq
现在我有这样的用户列表:
userid | username | usermail ...
--------------------------------------
@iBUQvldLq test test@gmaik.com ....
现在,当某个寄存器创建新字符串并将新字符串插入userid
数据库中的行时,然后我创建一个新字符串,然后检查创建的新字符串是否存在,如下所示:
function newID()
{
$newid = genID(10);
$query = "SELECT * FROM users WHERE userid = '".$newid."'";
$result1 = mysql_query($query);
$num = mysql_num_rows($result1);
if($num == 1)
{
$newid = genID(10);
return $newid;
}
else
{
return $newid;
}
}
有人知道如何循环检查功能吗?
我的意思是生成函数创建新的随机字符串,然后函数检查它是否已经存在,然后创建一个新的字符串,如果没有返回创建的字符串。
所以现在如果他创建了一个新的,并且新的也匹配相同的其他userid
,那么我如何循环直到新字符串永远不会与其他userid
字符串匹配?
类似循环的东西:
创建新字符串
验证是否存在
如果存在,请创建一个新的
如果新的也存在,则创建新的,依此类推
直到它永远无法匹配其他userid
,做一个循环,有什么想法吗?
编辑:
如果需要,循环的新功能:
函数 newID(){
$continue = true;
while ($continue) {
$newid = genID(10);
$query = mysql_query("SELECT * FROM users WHERE userid='".$newid."' LIMIT 1");
if (mysql_num_rows($query) != 1)
$continue = false;
return $newid;
}
}
$newid = newID();
看起来像你想要的代码是这样的。
function uHash(){
$continue = true;
while ($continue) {
$hash = substr(MD5(microtime()), 0, 7);
$query = mysql_query("SELECT `Link` FROM Table WHERE `value`='$hash' LIMIT 1");
if (mysql_num_rows($query) != 1)
$continue = false;
return $hash;
}
}
脚本将循环,直到找到唯一值。
将user_id
列设置为auto_increment
字段可以解决此问题。[最佳方法]
如果你真的想用PHP,uniqid()
和rand()
结合起来,生成一个不会碰撞的独特种子。
像这样的东西
<?php
echo $id = uniqid(rand(), true);
?>
只是你可以用于唯一id
<?php
function genID() {
return uniqid();
}
echo genID();
?>