Я не понимаю, почему мой код не работает. Соединение работает и все остальное, однако, когда я пытаюсь создать уникальное случайное число и проверять с помощью MySQL, если в нем есть номер, он по-прежнему распечатывает случайное число, но это не UNIQUE. Может ли кто-нибудь помочь мне? Вот мой код:
$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; } } }
Это должно работать:
$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;
Но если нет более возможных уникальных чисел, он будет зависеть навсегда.
Я знаю, что это немного устарело, но я нашел этот вопрос после того, как вам нужен аналогичный ответ. Я принял ответ 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; }