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

ffvjumwh  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(394)

我有一个我就是搞不懂的急冲。
我希望我的代码:
创建随机数
测试它是否存在于数据库中
如果存在,创建一个新的随机数og do number 2。再一次。
如果它不存在,在数据库中创建它。
我尝试了以下代码,在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个步骤的代码?
希望你能帮我解决这个问题!

ahy6op9u

ahy6op9u1#

代码不起作用的原因:
您将'true'设置为notfound结果,因此如果它没有找到任何内容,它将继续循环。
不管发生什么,回声都会显示代码。
这是实现您列出的目标的一种方法:

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;

这将始终运行代码一次(do),如果在数据库中找到随机数,则将重复执行。一旦在数据库中找不到它,那么在while循环完成后,您就可以在变量中使用一个随机数作为您的突发奇想。
对于这些问题,最好添加一个故障保护:

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

相关问题