测试数据库中是否存在数字,如果存在则创建一个新数字

时间:2018-06-28 10:52:15

标签: php mysql loops while-loop do-while

我有皮毛,我只是想不通。

我希望我的代码:

  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 :(得分:1)

您的代码无法正常工作的原因:

  • 您将“ 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);