如果数据库(PHP)中存在数字,则给出另一个随机整数
我正在尝试制作一个脚本,以检查是否已将int添加到我的数据库中。如果是这样,它将重新生成另一个随机数并再次检查。如果它不存在,它将插入数据库 然而,我有麻烦。如果一个数字存在,它只是打印出num exists,我如何重新循环它来检查另一个数字,然后插入它?我尝试使用继续,返回true等等。。。无论如何,这是我的代码;希望有人能帮助我如果数据库(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
<?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:祝你好运!:)@达尔梅什:至少你应该对答案投赞成票,这对你很有帮助。