【问题标题】:Test if number exist in database, create new one if it exists测试数据库中是否存在数字,如果存在则创建新的
【发布时间】:2018-12-07 10:15:53
【问题描述】:

我有点想不通。

我希望我的代码:

  1. 创建一个随机数
  2. 测试它是否存在于数据库中
  3. 如果存在,请再次创建一个新的随机数 og do number 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 个步骤的代码?

希望你能帮我解决这个问题!

【问题讨论】:

  • “问题是,它给了我多个数字” - 这不正是您在预期设计的第 3 步中想要做的吗?究竟是什么问题?
  • 问题是,我想得到一个在数据库中不存在的数字,然后创建该数字。当我得到更多数字时,我无法确定哪些不存在,哪些存在。
  • @RasmusKjeldsen:所以你只想打印在数据库中找不到的数字?然后将echo 语句移动到else 块中?
  • @IsThisJavascript 当我将 $unique_number_new 移到外面而我得到很多行时,我能以某种方式阻止这种情况吗? (见dance4fun.dk/test_folder/number_test.php
  • @David 完全正确。如果它存在,我希望代码测试一个新数字。有意义吗?

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


【解决方案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);

【讨论】:

  • 谢谢!现在工作得很好。
猜你喜欢
  • 2016-02-15
  • 2011-05-16
  • 1970-01-01
  • 2019-11-30
  • 2016-10-29
  • 2022-06-13
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多