3

我不明白为什么我的代码不起作用。连接工作正常,但是当我尝试生成一个唯一的随机数并从 MySQL 检查该数字是否存在时,它仍然会打印出一个随机数,但它不是唯一的。有人可以帮我吗?这是我的代码:

$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; 

        }
    }
}   
4

2 回答 2

2

这应该有效:

$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;   

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

于 2013-03-12T04:44:38.097 回答
1

我知道这有点老了,但在需要类似的答案后我发现了这个问题。我接受了 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;
}
于 2015-06-17T20:22:11.660 回答