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

标签 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 个步骤的代码?

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

最佳答案

您的代码不起作用的原因:

  • 您将“true”设置为未找到结果,因此如果没有找到任何内容,它将继续循环。
  • 无论如何,您都会收到显示代码的 echo 。

这是实现您列出的目标的一种方法:

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);

关于php - 测试数据库中是否存在数字,如果存在则创建新数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51081048/

相关文章:

php - 在给定元素下按 XPath 搜索

mysql - 添加新行created_at字段填充-3小时差异

javascript - 使用addEventListener(不是jquery)创建元素唯一id

php - 我想从三个表中获取数据,每个表都与 id 链接

有人可以帮我理解这个 "for"循环是如何工作的吗?

linux - 如何读取 FOR 循环中的空格

javascript - 使用回调将 PHP 变量传递给 JavaScript

php - 神秘的mysql错误

php - 调用了 lynx cronjob 但未发送 HTTP 请求

php - 字段列表中的列 'wine_id' 不明确错误,无法弄清楚原因