我有这个函数创建随机字符串:
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
,制作一个循环,任何想法?
已编辑:
如果有需要,循环的新函数:
function 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();
答案 0 :(得分:0)
将 user_id
列设置为 auto_increment
字段可以解决此问题。 [最佳方法]
如果您真的想要使用PHP,请将 uniqid()
与 rand()
结合使用,以生成不会发生碰撞的唯一种子。< / p>
像这样的东西
<?php
echo $id = uniqid(rand(), true);
?>
答案 1 :(得分:0)
您可以使用唯一ID
<?php
function genID() {
return uniqid();
}
echo genID();
?>
答案 2 :(得分:0)
看起来像你想要的代码......
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;
}
}
脚本将循环,直到找到唯一值。