Проверьте, существует ли номер в базе данных, создайте новый, если он существует - PullRequest
0 голосов
/ 28 июня 2018

У меня есть проблема, которую я просто не могу понять.

Я хочу, чтобы мой код:

  1. Создать случайное число
  2. Проверка наличия в базе данных
  3. Если оно существует, снова создайте новое случайное число или число 2.
  4. Если его не существует, создайте его в базе данных.

Я попробовал следующий код, который я нашел в аналогичной проблеме в Stackoverflow, но я просто не могу понять это:

$key = true;

while($key){

    $unique_number_new = rand(1000,9999);
    $result = mysql_query("SELECT * FROM brugere WHERE medlemsnummer = $unique_number_new");

    if(mysql_num_rows($result) > 0) {   
        $key = false;   
        // Allready exists

    } else {    
        $key = true;
        // Create in database
    }

        echo "Code done! - " . $unique_number_new;
}

Проблема в том, что она дает мне несколько номеров (см. https://www.dance4fun.dk/test_folder/number_test.php)

Как я могу создать код, который выполняет 4 вышеупомянутых шага?

Надеюсь, вы поможете мне с этим!

1 Ответ

0 голосов
/ 28 июня 2018

Причина, по которой ваш код не работал:

  • Вы установили 'true' как результат не найден, поэтому, если он ничего не найдет, он продолжит цикл.
  • У вас было эхо, показывающее вам код, несмотря ни на что.

Это способ достичь того, что вы перечислили:

do {
    $unique_num = mt_rand(1000,9999);
    // NOTE: changed mysql_query to use mysqli! (prepared statement not required here)
    $exists = mysqli_fetch_row(
                  mysqli_query(
                      $connection,
                      "SELECT COUNT(*) FROM brugere WHERE medlemsnummer = $unique_num"
                  )
              )[0];// [0] means grab column result
} while($exists);

echo "Code done! - " . $unique_num;

Это всегда будет запускать код один раз (делать) и повторяться, если в базе данных было найдено случайное число. Если он не найден в базе данных, у вас есть случайное число в переменной, которое можно использовать в качестве прихоти после завершения цикла while.

Для этих вещей неплохо добавить отказоустойчивый:

$c = 0;
do {
   $c++;
   /// other code
} while ($exists and $c < 1000);
...