如果数据库(PHP)中存在数字,则给出另一个随机整数

如果数据库(PHP)中存在数字,则给出另一个随机整数,php,mysql,loops,do-while,Php,Mysql,Loops,Do While,我正在尝试制作一个脚本,以检查是否已将int添加到我的数据库中。如果是这样,它将重新生成另一个随机数并再次检查。如果它不存在,它将插入数据库 然而,我有麻烦。如果一个数字存在,它只是打印出num exists,我如何重新循环它来检查另一个数字,然后插入它?我尝试使用继续,返回true等等。。。无论如何,这是我的代码;希望有人能帮助我 <?php require_once("./inc/config.php"); $mynum = 1; // Note I am purposely set

我正在尝试制作一个脚本,以检查是否已将int添加到我的数据库中。如果是这样,它将重新生成另一个随机数并再次检查。如果它不存在,它将插入数据库

然而,我有麻烦。如果一个数字存在,它只是打印出num exists,我如何重新循环它来检查另一个数字,然后插入它?我尝试使用继续返回true等等。。。无论如何,这是我的代码;希望有人能帮助我

<?php
require_once("./inc/config.php");

$mynum = 1; // Note I am purposely setting this to one, so it will always turn true so the do {} while will be initiated.

echo "attempts: ---- ";

$check = $db->query("SELECT * FROM test WHERE num = $mynum")or die($db->error);

if($check->num_rows >= 1) {
    do {

        $newnum = rand(1, 5);
            $newcheck = $db->query("SELECT * FROM test WHERE num = $newnum")or die($db->error);
                if($newcheck->num_rows >= 1) {
                echo $newnum . " exists! \n";
                } else {
            $db->query("INSERT test (num) VALUES ('$newnum')")or die($db->error);
            echo "$newnum - CAN INSERT@!@!@";
            break;
        }

    } while(0);
}
?>

此处的逻辑不正确。您的
do-while
循环将只执行一次(因为它是一个退出控制循环),并将在下一次迭代中停止,因为
while(0)
条件为
FALSE

请尝试以下操作:

while($check->num_rows >= 1) {
    $newnum = rand(1, 5);
    $newcheck = $db->query("SELECT * FROM test WHERE num = $newnum")or die($db->error);

    if ($newcheck->num_rows >= 1) {
        echo $newnum . " exists! \n";
    } else {
        $db->query("INSERT test (num) VALUES ('$newnum')") or die($db->error);
        echo "$newnum - CAN ISNERT@!@!@";
        break;
    }
}

旁注:就目前情况而言,您的查询容易受到攻击,并可能产生意外结果。您应该始终转义用户输入。查看StackOverflow线程,了解如何防止SQL注入。

此处的逻辑不正确。您的
do-while
循环将只执行一次(因为它是一个退出控制循环),并将在下一次迭代中停止,因为
while(0)
条件为
FALSE

请尝试以下操作:

while($check->num_rows >= 1) {
    $newnum = rand(1, 5);
    $newcheck = $db->query("SELECT * FROM test WHERE num = $newnum")or die($db->error);

    if ($newcheck->num_rows >= 1) {
        echo $newnum . " exists! \n";
    } else {
        $db->query("INSERT test (num) VALUES ('$newnum')") or die($db->error);
        echo "$newnum - CAN ISNERT@!@!@";
        break;
    }
}

旁注:就目前情况而言,您的查询容易受到攻击,并可能产生意外结果。您应该始终转义用户输入。查看StackOverflow线程,了解如何防止SQL注入。

我认为您要寻找的逻辑基本上是这样的:

do {
  $i = get_random_int();
} while(int_exists($i));
insert_into_db($i);
(提出一些函数名通常有助于简化事情并了解实际情况。)

现在,用您的代码替换伪函数:

do {
  $i = rand(1, 5);
  $newcheck = $db->query("SELECT * FROM test WHERE num = $i")or die($db->error);
  if ($newcheck->num_rows >= 1) {
    $int_exists = true;
  } else {
    $int_exists = false;
  }
} while($int_exists);
$db->query("INSERT test (num) VALUES ('$i')") or die($db->error);
当然,你可以做更多的调整,通过缩短

// ...
  if ($newcheck->num_rows >= 1) {
    $int_exists = true;
  } else {
    $int_exists = false;
  }
} while($int_exists);
…致:

// ...
  $int_exists = $newcheck->num_rows >= 1;
} while($int_exists);
(比较的结果是布尔值,
=可以看到,您也可以将此值指定给变量,这样可以节省4行代码。)

此外,如果您想取得更进一步的进展,请尝试用实际的、有意义的函数替换数据库调用,就像我在第一个示例中所做的那样


这样,您的代码将变得更加可读、紧凑和可重用。最重要的是,通过这种方式,您可以了解更多编程知识。

我认为您所寻找的逻辑基本上是这样的:

do {
  $i = get_random_int();
} while(int_exists($i));
insert_into_db($i);
(提出一些函数名通常有助于简化事情并了解实际情况。)

现在,用您的代码替换伪函数:

do {
  $i = rand(1, 5);
  $newcheck = $db->query("SELECT * FROM test WHERE num = $i")or die($db->error);
  if ($newcheck->num_rows >= 1) {
    $int_exists = true;
  } else {
    $int_exists = false;
  }
} while($int_exists);
$db->query("INSERT test (num) VALUES ('$i')") or die($db->error);
当然,你可以做更多的调整,通过缩短

// ...
  if ($newcheck->num_rows >= 1) {
    $int_exists = true;
  } else {
    $int_exists = false;
  }
} while($int_exists);
…致:

// ...
  $int_exists = $newcheck->num_rows >= 1;
} while($int_exists);
(比较的结果是布尔值,=可以看到,您也可以将此值指定给变量,这样可以节省4行代码。)

此外,如果您想取得更进一步的进展,请尝试用实际的、有意义的函数替换数据库调用,就像我在第一个示例中所做的那样


这样,您的代码将变得更加可读、紧凑和可重用。最重要的是,通过这种方式,您可以了解更多关于编程的知识。

下面是我使用以前编写的一些脚本编写的一些代码的示例。与代码相比,您会注意到一些变化,但概念应该是一样的。希望能有帮助

在我的示例中,我将从包含的配置文件中提取数据库主机、用户、密码和名称

require_once("./inc/config.php");

echo "attempts: ---- ";

$running = true;
while($running == true) {

//create random number from 1-5
$newnum = rand(1,5); 

//connect to database
$mysqli = new mysqli(HOST, USER, PASSWORD, NAME); 
//define our query
$sql = "SELECT * FROM `test` WHERE `num` = '".$$newnum."'"; 
//run our query
$check_res = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    //check results, if num_rows >= our number exists
    if (mysqli_num_rows($check_res) >= 1){ 
    echo $newnum . " exists! \n";
}
else { //our number does not yet exists in database

    $sql = "INSERT INTO `test`(`num`) VALUES ('".$newnum."')";
    $check_res = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
    if ($check_res){
        echo $newnum . " - CAN ISNERT@!@!@";

        // close connection to datbase
        mysqli_close($mysqli);
    }
    else{
        echo "failed to enter into database";
        // close connection to database
        mysqli_close($mysqli); 
    }
    break;
}


}
我还想指出的是,如果所有的数字都被使用了,这将继续运行,您可能希望在所有数字都被使用时输入一些跟踪内容,并导致中断跳出循环


希望这有帮助

下面是我使用以前编写的脚本拼凑的一些代码的示例。与代码相比,您会注意到一些变化,但概念应该是一样的。希望能有帮助

在我的示例中,我将从包含的配置文件中提取数据库主机、用户、密码和名称

require_once("./inc/config.php");

echo "attempts: ---- ";

$running = true;
while($running == true) {

//create random number from 1-5
$newnum = rand(1,5); 

//connect to database
$mysqli = new mysqli(HOST, USER, PASSWORD, NAME); 
//define our query
$sql = "SELECT * FROM `test` WHERE `num` = '".$$newnum."'"; 
//run our query
$check_res = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    //check results, if num_rows >= our number exists
    if (mysqli_num_rows($check_res) >= 1){ 
    echo $newnum . " exists! \n";
}
else { //our number does not yet exists in database

    $sql = "INSERT INTO `test`(`num`) VALUES ('".$newnum."')";
    $check_res = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
    if ($check_res){
        echo $newnum . " - CAN ISNERT@!@!@";

        // close connection to datbase
        mysqli_close($mysqli);
    }
    else{
        echo "failed to enter into database";
        // close connection to database
        mysqli_close($mysqli); 
    }
    break;
}


}
我还想指出的是,如果所有的数字都被使用了,这将继续运行,您可能希望在所有数字都被使用时输入一些跟踪内容,并导致中断跳出循环


希望这有帮助

@dharmeshpp:这发生在我们所有人身上。我的回答有用吗?是的,伙计。这个基本想法奏效了。现在由我来实现我的实际代码。再次感谢。@Dharmeshp:祝你好运!:)@达尔梅什:至少你应该对答案投赞成票,这对你很有帮助。@达尔梅什:我们大家都会这样。我的回答有用吗?是的,伙计。这个基本想法奏效了。现在由我来实现我的实际代码。再次感谢。@Dharmeshp:祝你好运!:)@达尔梅什:至少你应该对答案投赞成票,这对你很有帮助。