PHP MySQL生成唯一的随机数

时间:2013-03-12 04:11:43

标签: php mysql database

我不明白为什么我的代码无效。连接工作和其他一切但是当我尝试生成一个唯一的随机数并从MySQL检查数字是否存在它仍然打印出一个随机数,但它不是唯一的。 thx可以帮助我吗? 这是我的代码:

$num = rand(1,5);
$sel_query  = "SELECT *  FROM  test"; 
$result2 =  $con->query($sel_query);

$i = 1;
for (;$i<2; $i++)
{
    while($row = mysqli_fetch_array($result2))
    {
        if ($row['id'] == $num) 
        {
             $num = rand(1,5);
             $i = 0; 

        }
    }
}   

2 个答案:

答案 0 :(得分:1)

这应该有效:

$is_unique = false;
$num = false;
while (!$is_unique){
    $num = rand(1,5);
    $sel_query  = "SELECT id from test where id = " . $num; 
    $result2 =  $con->query($sel_query) or die($conn->error);
    if (!mysqli_fetch_array($result2)){
        $is_unique = true;
    }
}
echo "Unique number is " . $num;   

但如果没有更多可能的唯一数字,它将永远循环。

答案 1 :(得分:0)

我知道这有点旧,但在需要类似的答案之后我发现了这个问题。我已经采取了Jodes的答案并稍微更新了它,因此它不会永远运行,是一个返回数字的函数,并接受一个mysqli连接为$ mysqli:

function getUniqueNumber($mysqli)
{
    $is_unique = false;
    $num = false;
    $times_run = 0;
    while (!$is_unique)
    {
        if($times_run > 10)
        {
            echo "Run too many times, dying.";
            die();
        }
        $num = rand(1,5);
        $sel_query  = "SELECT id from test where id = " . $num; 
        $result2 =  $mysqli->query($sel_query) or die($mysqli->error);
        if (!mysqli_fetch_array($result2))
        {
            $is_unique = true;
        }
        $times_run++;
    }
    return $num;
}