3

コードが機能しない理由がわかりません。接続は機能しますが、一意の乱数を生成して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; 

        }
    }
}   
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 に答える